线程创建的两种方式
来源:互联网 发布:虚拟机 mac os 优化 编辑:程序博客网 时间:2024/06/03 16:42
第一种启动线程的方法:
利用thread(通过覆盖thread的run方法)
Thread thread1 = new Thread() { @Override public void run() { while (true) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("1--" + Thread.currentThread().getName()); } }};thread1.start();
第二种启动线程的方法:
利用Runnable,将线程要执行的代码放在Runnable中
Thread thread2 = new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("1--" + Thread.currentThread().getName()); } }});thread2.start();
推荐使用Runnable方式来创建线程
1. 避免单继承的限制
2. 将代码封装到了Runnable中,符合面向对象的思想
Thread类内部:
thread的run方法中其实执行的就是runnable对象的run方法
private Runnable target;public void run() { if (target != null) { target.run(); }}
理解下面的例子:
执行结果:
thread--Thread-0thread--Thread-0thread--Thread-0
new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("runnable--" + Thread.currentThread().getName()); } }}) { public void run() { while (true) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread--" + Thread.currentThread().getName()); } };}.start();
Thread的接收Runnable参数的构造方法中:
init中实现的就是this.target=target;
所以执行的run方法其实还是Runnable执行的run方法
public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0);}
而上面的例子的thread覆盖了run方法,也就是不执行target.run(),而是执行自己覆盖后的run方法中的内容。
所以程序的结果是:执行thread的run方法中的内容,而非runnable的run方法中的内容。
阅读全文
0 0
- 创建线程两种方式的比较
- java 创建线程 的两种方式
- 创建线程两种方式的比较
- 创建线程的两种方式
- 创建线程的两种方式
- 多线程 创建线程的两种方式
- 创建线程的两种方式
- Java线程创建的两种方式
- 创建线程的两种方式
- 创建线程的两种方式
- 创建线程的两种方式。
- java创建线程的两种方式
- 线程的两种创建方式
- java创建线程的两种方式
- java线程的两种创建方式
- Java创建线程的两种方式
- 线程创建的两种方式
- 创建线程的两种方式
- 时间戳
- LoadRunner如何使用lr_save_var截取任意字符串长度
- spring 容器中配置 map 成员变量
- python--c++--旋转数组的最小数字
- boost设计TCP服务器中的strand与心跳机制实现
- 线程创建的两种方式
- linux 基于timerfd的纳秒级定时器
- 刷清橙OJ--A1032.画三角形2
- js从table中获得所需信息转为json
- 【VirtualBox】安装增强功能
- PHP可逆加密解密算法
- HTML5 5大存储方式总结
- CreateThread后立即CloseHandle,为什么线程还在运行?
- 深度学习-框架-目录及地址