Thread与Runnable的区别
来源:互联网 发布:ubuntu 迅雷 编辑:程序博客网 时间:2024/05/17 23:56
public class MyThread extends Thread { int ticket = 2; @Override public void run() { synchronized (MyThread.class){ for(int i = 0; i < 10 ; i ++){ if(ticket > 0){ System.out.println("threadId:" + Thread.currentThread().getId() + "\t\t余票:" + ticket); ticket -- ; }else { System.out.println("threadId:" + Thread.currentThread().getId() + "\t\t没票了。"); break; } } }; }}public class MyRunnable implements Runnable { int ticket = 2; @Override public void run() { synchronized (MyRunnable.class){ for (int i = 0; i < 10; i++) { if (ticket > 0) { System.out.println("threadId:" + Thread.currentThread().getId() + "\t\t余票:" + ticket); ticket--; } else { System.out.println("threadId:" + Thread.currentThread().getId() + "\t\t没票了。"); break; } } }; }}public Thread()public Thread(Runnable target)Thread thread = new MyThread();thread.run();thread.run();thread.start();new MyThread().start();new MyThread().start();Runnable myRunnable = new MyRunnable();myRunnable.run();new Thread(myRunnable).start();new Thread(myRunnable).start();------------thread.run()------------run只是当作普通方法调用(可以多次调用,并不会创建新线程(与调用者所处的线程有关可以是子线程也可以是主线程)),测试时是在主线程调用的,所以线程id为1。)threadId:1余票:2threadId:1余票:1threadId:1没票了。------------thread.run()------------threadId:1没票了。------------thread.start()------------会新建线程,且start只能被调用一次(多次调用会抛异常)threadId:12没票了。------------new MyThread().start()------------每个Thread实例都拥有自己的ticket属性threadId:13余票:2threadId:13余票:1threadId:13没票了。------------new MyThread().start()------------每个Thread实例都拥有自己的ticket属性threadId:14余票:2threadId:14余票:1threadId:14没票了。------------myRunnable.run()------------run只是当作普通方法调用(可以多次调用,并不会创建新线程),threadId:1余票:2实现Runnable接口的并不是线程类(没有start方法可调用),只有Thread及其子类才是线程类。threadId:1余票:1threadId:1没票了。------------new Thread(myRunnable).start()------------多个Thread实例共用一个"target",即共用ticket属性threadId:15没票了。------------new Thread(myRunnable).start()------------多个Thread实例共用一个"target",即共用ticket属性threadId:16没票了。Thread调用run方法并不会新建线程Thread只有在调用start方法时才会新建线程,并自动调用run方法。
阅读全文
0 0
- Runnable与Thread的区别
- Thread与Runnable的区别
- thread 与 runnable 的区别
- runnable与Thread的区别
- thread与runnable的区别
- Thread与Runnable的区别
- thread与runnable的区别
- Thread与Runnable的区别
- Thread 与Runnable区别
- Thread与Runnable区别
- Thread 与Runnable区别
- Thread与Runnable区别
- Thread 与 Runnable 区别
- runnable与thread区别
- Thread与Runnable 区别
- thread与runnable区别
- Runnable接口与Thread类的区别
- java中Thread与Runnable的区别
- maven搭建项目--实现mybatis增删改差、一对多及一对一关系
- GCJ 2008 Round1A A Minimum Scalar Product
- gdb调试
- UVA-10128 Queue
- UVA-10082 WERTYU
- Thread与Runnable的区别
- codeforces 455D 分块
- 数码影像学到的知识汇总
- 抓包浏览器操作
- 漏洞银行/逆向工程学习日记(2)-8086指令系统之通用寄存器
- 解决Java抛出的异常,log中不含具体的堆栈信息
- 简述为什么不能用父类给子类赋值
- CentOS7(64位)下运行IPython3出错解决办法
- 史上最全最强SpringMVC详细示例实战教程