个人开办导航网站需要怎么做合肥瑶海区小学排名

张小明 2026/1/7 12:10:39
个人开办导航网站需要怎么做,合肥瑶海区小学排名,wap手机网站静态模板,国际实时新闻最新消息一、先搞懂#xff1a;什么是 Java 多线程#xff1f;可以把进程想象成一个正在运行的应用程序#xff08;比如你的微信#xff09;#xff0c;而线程是进程里的最小执行单元#xff08;比如微信同时处理接收消息、显示界面、播放语音#xff09;。Java 多线程就是让一个…一、先搞懂什么是 Java 多线程可以把进程想象成一个正在运行的应用程序比如你的微信而线程是进程里的最小执行单元比如微信同时处理接收消息、显示界面、播放语音。Java 多线程就是让一个 Java 程序同时执行多个任务充分利用 CPU 资源提升程序运行效率比如下载文件时一个线程下载、一个线程显示进度、一个线程校验文件。二、Java 多线程的 3 种核心实现方式方式 1继承 Thread 类最基础Thread 类是 Java 封装好的线程类继承它并重写run()方法线程要执行的任务调用start()启动线程注意不能直接调用run()否则只是普通方法调用。java运行// 步骤1继承Thread类 class MyThread extends Thread { // 步骤2重写run()方法定义线程任务 Override public void run() { for (int i 0; i 5; i) { // Thread.currentThread().getName()获取当前线程名称 System.out.println(Thread.currentThread().getName() 执行 i); try { Thread.sleep(100); // 线程休眠100ms模拟任务耗时 } catch (InterruptedException e) { e.printStackTrace(); } } } } public class ThreadDemo { public static void main(String[] args) { // 步骤3创建线程对象并启动 MyThread thread1 new MyThread(); thread1.setName(线程1); thread1.start(); // 启动线程1 MyThread thread2 new MyThread(); thread2.setName(线程2); thread2.start(); // 启动线程2 } }输出效果线程 1 和线程 2 交替执行顺序不固定因为 CPU 调度是随机的plaintext线程1 执行0 线程2 执行0 线程1 执行1 线程2 执行1 ...方式 2实现 Runnable 接口推荐避免单继承限制Java 是单继承所以更推荐实现Runnable接口只定义run()方法再把 Runnable 对象传给 Thread 类启动。java运行// 步骤1实现Runnable接口 class MyRunnable implements Runnable { Override public void run() { for (int i 0; i 5; i) { System.out.println(Thread.currentThread().getName() 执行 i); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class RunnableDemo { public static void main(String[] args) { // 步骤2创建Runnable任务对象 MyRunnable task new MyRunnable(); // 步骤3将任务传给Thread并启动 Thread thread1 new Thread(task, 线程A); thread1.start(); Thread thread2 new Thread(task, 线程B); thread2.start(); } }方式 3实现 Callable 接口带返回值 可抛异常前两种方式没有返回值Callable接口支持线程执行完返回结果搭配FutureTask获取结果。java运行import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; // 步骤1实现Callable接口指定返回值类型这里是Integer class MyCallable implements CallableInteger { Override public Integer call() throws Exception { int sum 0; for (int i 1; i 100; i) { sum i; } return sum; // 线程执行结果 } } public class CallableDemo { public static void main(String[] args) throws Exception { // 步骤2创建Callable任务 MyCallable callable new MyCallable(); FutureTaskInteger futureTask new FutureTask(callable); // 步骤3启动线程 Thread thread new Thread(futureTask); thread.start(); // 步骤4获取线程执行结果get()会阻塞直到线程执行完成 Integer result futureTask.get(); System.out.println(线程执行结果1-100求和 result); // 输出5050 } }三、多线程核心问题线程安全多个线程同时操作共享数据时会出现数据错乱比如两个线程同时给一个变量加 1结果可能不是预期值。解决方法加锁synchronizedjava运行// 共享资源类 class Counter { private int count 0; // 加synchronized关键字保证同一时间只有一个线程执行该方法 public synchronized void increment() { count; } public int getCount() { return count; } } // 线程任务调用increment() class CounterTask implements Runnable { private Counter counter; public CounterTask(Counter counter) { this.counter counter; } Override public void run() { for (int i 0; i 1000; i) { counter.increment(); } } } public class ThreadSafeDemo { public static void main(String[] args) throws InterruptedException { Counter counter new Counter(); // 两个线程操作同一个Counter对象 Thread t1 new Thread(new CounterTask(counter)); Thread t2 new Thread(new CounterTask(counter)); t1.start(); t2.start(); // 等待两个线程执行完成 t1.join(); t2.join(); System.out.println(最终计数 counter.getCount()); // 正确输出2000不加锁可能小于2000 } }四、Java 多线程常用工具JUC 包新手入门核心Java 提供了java.util.concurrentJUC包简化多线程开发核心工具线程池ExecutorService避免频繁创建 / 销毁线程的开销复用线程执行任务java运行import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolDemo { public static void main(String[] args) { // 创建固定大小的线程池2个线程 ExecutorService pool Executors.newFixedThreadPool(2); // 提交3个任务线程池会复用2个线程执行 pool.submit(() - System.out.println(Thread.currentThread().getName() 执行任务1)); pool.submit(() - System.out.println(Thread.currentThread().getName() 执行任务2)); pool.submit(() - System.out.println(Thread.currentThread().getName() 执行任务3)); pool.shutdown(); // 关闭线程池 } }Lock 锁比synchronized更灵活支持手动加锁 / 解锁、可中断、超时等待CountDownLatch等待多个线程执行完成后主线程再继续比如等待所有下载线程完成再合并文件五、多线程常见坑点 注意事项线程启动错误调用run()而非start()导致没有创建新线程只是主线程执行方法。线程安全问题未加锁操作共享数据导致数据不一致比如电商库存超卖。线程死锁两个线程互相持有对方需要的锁导致都无法执行比如线程 1 拿锁 A 等锁 B线程 2 拿锁 B 等锁 A。过度创建线程线程数超过 CPU 核心数太多会导致线程切换开销过大反而降低效率。六、实战场景什么时候用多线程耗时操作下载、文件读写、网络请求单独开线程避免主线程阻塞比如 GUI 程序卡界面。批量处理任务批量导入数据、批量生成报表用线程池并行处理提升效率。实时性要求高的场景秒杀系统、实时监控多线程同时处理请求。总结Java 多线程核心是让程序并行执行多个任务核心实现方式有继承 Thread、实现 Runnable推荐、实现 Callable带返回值启动线程必须调用start()。多线程操作共享数据时必须通过synchronized或 Lock 保证线程安全避免数据错乱。实际开发中优先使用 JUC 包的线程池复用线程、CountDownLatch等工具减少手动管理线程的复杂度规避死锁、过度创建线程等问题。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建设网站具体的步骤简单的网站开发模板

MOOTDX:一站式通达信股票数据接口解决方案 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 对于量化投资开发者和金融数据分析师而言,获取稳定可靠的股票行情数据是构建分析…

张小明 2025/12/31 20:11:36 网站建设

朝阳网站建设怎么样asp网站开发教程百度云

LDAP代理的高级配置与应用 1. LDAP后端的身份管理特性 LDAP后端有一些更高级的功能,其中ID断言(ID assertion)就是一个典型。通过ID断言,我们可以将认证和授权任务分离,客户端以自身提供的DN进行认证,但代理服务器以另一个用户的身份执行工作。 要使用ID断言功能,需要…

张小明 2025/12/31 22:47:47 网站建设

个人手机网站大全外贸soho自己建站

引言 在多线程编程中,频繁创建和销毁线程会消耗大量系统资源,影响应用性能。Java线程池通过复用已创建的线程,有效解决了这一问题。本文将深入剖析Java线程池的核心原理、参数配置和实战技巧,帮助1-3年经验的开发者掌握线程池的正…

张小明 2025/12/31 22:47:45 网站建设

如何做网站架构西安小型网络公司

还记得那个深夜,当我在ComfyUI界面上第一次看到WAN2.2-14B-Rapid-AllInOne的加载界面时,那种"终于找到了"的激动心情吗?这个将WAN 2.2核心架构、CLIP文本编码器和VAE视觉解码器融为一体的解决方案,彻底改变了AI视频创作…

张小明 2025/12/31 22:47:43 网站建设

烟台百度建网站wordpress 页面排版

字节跳动AHN-DN大模型:仿生记忆革命让AI处理百万字文本成本降74% 【免费下载链接】AHN-DN-for-Qwen-2.5-Instruct-3B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/AHN-DN-for-Qwen-2.5-Instruct-3B 导语 当AI阅读一本500页的法律合同或分…

张小明 2025/12/31 22:47:41 网站建设

学校英文版网站建设兰州seo公司

5个实战技巧:让你的网页内容一键变身专业PDF 【免费下载链接】wkhtmltopdf 项目地址: https://gitcode.com/gh_mirrors/wkh/wkhtmltopdf 还在为网页内容无法完美保存而烦恼?每次想要保存重要文章时,格式错乱、图片丢失、排版变形的问…

张小明 2026/1/5 10:19:12 网站建设