当前位置: 首页 > wzjs >正文

渝中集团网站建设如何优化网络速度

渝中集团网站建设,如何优化网络速度,小学生制作书签,php做的网站优缺点一、Thread 与 Runnable 的区别 1. 核心概念 ​​特性​​​​Thread​​​​Runnable​​​​实现方式​​继承 Thread 类并重写 run() 方法实现 Runnable 接口并实现 run() 方法​​灵活性​​单继承限制,无法继承其他类无继承限制,可继承其他类或实…

一、Thread 与 Runnable 的区别

1. 核心概念

​特性​​Thread​​Runnable​
​实现方式​继承 Thread 类并重写 run() 方法实现 Runnable 接口并实现 run() 方法
​灵活性​单继承限制,无法继承其他类无继承限制,可继承其他类或实现其他接口
​资源共享​每个 Thread 实例独立运行多个线程可共享同一 Runnable 实例
​推荐使用​早期 Java 版本现代 Java 开发(更灵活)

2. 代码示例

(1) 继承 Thread 类
java
复制
class MyThread extends Thread {@Overridepublic void run() {System.out.println("Thread 方式运行: " + Thread.currentThread().getName());}
}// 使用
public class Main {public static void main(String[] args) {MyThread thread = new MyThread();thread.start(); // 启动新线程(调用 run())}
}
(2) 实现 Runnable 接口
java
复制
class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("Runnable 方式运行: " + Thread.currentThread().getName());}
}// 使用
public class Main {public static void main(String[] args) {Thread thread = new Thread(new MyRunnable());thread.start(); // 启动新线程(调用 run())}
}
(3) 匿名内部类(简化写法)
java
复制
// Thread 匿名类
new Thread() {@Overridepublic void run() {System.out.println("匿名 Thread 运行");}
}.start();// Runnable 匿名类
new Thread(new Runnable() {@Overridepublic void run() {System.out.println("匿名 Runnable 运行");}
}).start();

二、线程生命周期

1. 线程状态图

复制
新建 (New) → 就绪 (Runnable) → 运行 (Running) → 终止 (Terminated)↑        ↓               ↓└阻塞 (Blocked) ←───────┘

2. 状态说明

​状态​​触发条件​​示例​
​新建 (New)​通过 new Thread() 创建线程对象Thread thread = new Thread();
​就绪 (Runnable)​调用 start() 方法后,等待 CPU 调度thread.start();
​运行 (Running)​线程获得 CPU 时间片,执行 run() 方法线程正在执行任务
​阻塞 (Blocked)​等待资源或锁(如 sleep()wait()Thread.sleep(1000);
​终止 (Terminated)​run() 方法执行完毕或线程被强制终止线程任务完成或调用 stop()(不推荐)

3. 状态转换示例

java
复制
class LifecycleDemo implements Runnable {@Overridepublic void run() {System.out.println("线程启动: " + Thread.currentThread().getName());try {// 进入阻塞状态(睡眠 2 秒)Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程终止");}
}public class Main {public static void main(String[] args) {Thread thread = new Thread(new LifecycleDemo());System.out.println("线程状态: " + thread.getState()); // NEWthread.start(); // 进入 RUNNABLESystem.out.println("线程状态: " + thread.getState()); // RUNNABLEtry {// 等待线程执行完毕thread.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("最终线程状态: " + thread.getState()); // TERMINATED}
}

三、核心方法与使用场景

1. 常用方法

​方法​​作用​​示例​
start()启动线程,JVM 调用 run() 方法thread.start();
run()线程执行体(直接调用不会启动新线程)重写 run() 方法
sleep(millis)使线程休眠指定毫秒数Thread.sleep(1000);
join()等待线程执行完毕thread.join();
currentThread()获取当前线程对象Thread.currentThread().getId();

2. 示例:线程休眠与等待

java
复制
class SleepDemo implements Runnable {@Overridepublic void run() {System.out.println("开始执行: " + Thread.currentThread().getName());try {// 休眠 1 秒Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("执行结束: " + Thread.currentThread().getName());}
}public class Main {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(new SleepDemo());thread.start();// 主线程等待子线程结束thread.join();System.out.println("主线程继续执行");}
}

四、Thread vs Runnable 最佳实践

1. 为何推荐 Runnable?

  • ​避免单继承限制​​:Java 类只能继承一个父类,使用 Runnable 可继承其他类。
  • ​资源共享​​:多个线程可共享同一 Runnable 实例,适合需要数据共享的场景。
  • ​解耦​​:将任务(Runnable)与线程(Thread)分离,提高代码灵活性。
示例:多线程共享资源
java
复制
class Counter implements Runnable {private int count = 0;@Overridepublic void run() {for (int i = 0; i < 5; i++) {count++;System.out.println(Thread.currentThread().getName() + ": " + count);}}
}public class Main {public static void main(String[] args) {Counter counter = new Counter();// 两个线程共享同一 Counter 实例Thread t1 = new Thread(counter, "线程1");Thread t2 = new Thread(counter, "线程2");t1.start();t2.start();}
}

2. Thread 的适用场景

  • 需要直接控制线程行为(如设置线程优先级、守护线程)。
  • 需要复用线程池中的线程(结合 ExecutorService)。

五、线程生命周期实战

场景:模拟订单处理流程

java
复制
class OrderProcessor implements Runnable {@Overridepublic void run() {System.out.println("订单处理开始: " + Thread.currentThread().getName());try {// 模拟耗时操作Thread.sleep(3000);} catch (InterruptedException e) {System.out.println("订单处理被中断");return; // 提前终止}System.out.println("订单处理完成: " + Thread.currentThread().getName());}
}public class Main {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(new OrderProcessor());System.out.println("线程状态: " + thread.getState()); // NEWthread.start();System.out.println("线程状态: " + thread.getState()); // RUNNABLE// 主线程等待 1 秒后中断Thread.sleep(1000);thread.interrupt(); // 发送中断信号thread.join();System.out.println("最终线程状态: " + thread.getState()); // TERMINATED}
}

六、总结

  • ​Thread 与 Runnable​​:
    • ​Runnable​​ 更灵活,推荐使用;​​Thread​​ 适合直接控制线程行为。
  • ​线程生命周期​​:
    • 重点关注 ​​新建 → 就绪 → 运行 → 终止​​,以及 ​​阻塞​​ 状态的触发条件。
  • ​核心方法​​:
    • start() 启动线程,run() 定义任务,sleep() 和 join() 控制流程。

​最佳实践​​:

  1. 优先使用 Runnable + 线程池(如 ExecutorService)。
  2. 避免直接调用 Thread.sleep() 长时间阻塞。
  3. 处理中断异常(InterruptedException),确保线程优雅退出。
http://www.dtcms.com/wzjs/522204.html

相关文章:

  • 杭州蓝韵网络有限公司seo搜索引擎优化工资
  • 聊城住房建设局网站销售新手怎么找客源
  • 源代码代做网站百度接单平台
  • 免费的简历制作网站关于进一步优化
  • 公司网站更换域名seo自学教程seo免费教程
  • 58桐城网站做装修推广是真的吗推广公众号的9种方法
  • 网络营销的网站建设报告企业seo
  • 图片网站建设英文外链seo兼职
  • 商丘做网站推广免费留电话的广告
  • 长沙网站搜索排名湖南关键词优化品牌价格
  • 高端网站设计制开发网站建设公司
  • 乐清做网站价格搜狗收录批量查询
  • 网页设计网页制作长沙建站seo公司
  • 设计网站怎么收费免费做网站推广的软件
  • pdf怎么做电子书下载网站网站优化提升排名
  • 梅州网站优化web网址
  • 做数独的网站免费推广神器
  • 专门做继电器的网站关键词全网搜索
  • 网站建设团队重庆seo排名优化
  • 长宁哪里有做网站优化比较好网站点击量查询
  • 上海企业联系方式相关搜索优化软件
  • 如何做网站引流seo的主要工作内容
  • 北京网站建设的关键词免费的郑州网络推广服务
  • 宁波网站建设制作网络公司什么软件可以刷网站排名
  • 阜阳网站制作公司哪里有强强seo博客
  • 做文献综述用什么网站怎样交换友情链接
  • 郑州网站建设优化公司广州商务网站建设
  • cgi做的网站网络软文营销案例3篇
  • 100g网站空间百度网盘资源搜索引擎入口
  • 有可以做推广的网站吗新闻实时报道