java创建多线程方法之间的区别
2014-05-04 20:16
281 查看
我们知道java中创建多线程有两种方法(详见/article/1846451.html)。那么两者有什么区别呢?
可见同一对象,无论调用多少次start,都仅仅执行一次代码。
code2
可见对于不同对象,每一个对象均执行了一次代码,且num没有被共享。
不同对象,Runnable接口,多个线程,未实现数据共享。
code4
可见使用相同的对象,实现了数据共享。
一、情形一
code1/** * ThreadTestDemo.java * @author cjc * */ public class ThreadTestDemo { public static void main(String[] args) { Ticket t=new Ticket(); t.start(); t.start(); t.start(); t.start(); } }
/* * Ticket.java */ public class Ticket extends Thread { private int num=5; public void run() { while(true) { if(num>0) { num--; System.out.println(Thread.currentThread().getName()+":剩余"+num+"张票。"); } } } }
可见同一对象,无论调用多少次start,都仅仅执行一次代码。
二、情形二
在code1的基础之上修改ThreadTestDemo.java,其余代码不变,得到code2code2
/** * ThreadTestDemo.java * @author cjc * */ public class ThreadTestDemo { public static void main(String[] args) { new Ticket().start(); new Ticket().start(); new Ticket().start(); new Ticket().start(); } }
可见对于不同对象,每一个对象均执行了一次代码,且num没有被共享。
三、情形三
code3/** * ThreadTestDemo.java * @author cjc * */ public class ThreadTestDemo { public static void main(String[] args) { Thread th1=new Thread(new Ticket()); Thread th2=new Thread(new Ticket()); th1.start(); th2.start(); } }
/* * Ticket.java */ public class Ticket implements Runnable { private int num=5; public void run() { while(true) { if(num>0) { num--; System.out.println(Thread.currentThread().getName()+":剩余"+num+"张票。"); } } } }
不同对象,Runnable接口,多个线程,未实现数据共享。
四、情形四
修改code3中的ThreadTestDemo.java,其余代码不变,得到code4code4
/** * ThreadTestDemo.java * @author cjc * */ public class ThreadTestDemo { public static void main(String[] args) { Ticket t=new Ticket(); Thread th1=new Thread(t); Thread th2=new Thread(t); th1.start(); th2.start(); } }
可见使用相同的对象,实现了数据共享。
相关文章推荐
- java中Integer对象不同创建方法之间的区别
- java中创建目录的方法mkdirs和mkdir之间的区别
- 简单模拟Java中创建多线程的两种方法
- java创建多线程的三种方法
- java -- 多线程的两种创建方法
- java设计模式-创建模式之 简单工厂,工厂方法和抽象工厂的区别总结
- java创建多线程的两种方法
- Java中有两种实现多线程的方式以及两种方式之间的区别
- Java中多线程的创建方法
- 创建线程的两种方法,及之间的区别
- JAVA多线程之——wait/yield/sleep/join方法的区别
- Java中实现多线程的两种方式之间的区别
- Java创建多线程的三种方法
- java中创建线程的两种方法的区别
- 2017第45周一java多线程创建方法
- 【多线程】java 两种创建线程的方法
- 黑马程序员--JAVA基础复习之多线程(一)概念与创建方法
- JAVA多线程之——wait/yield/sleep/join方法的区别
- 黑马程序员 Java学习总结之多线程中start方法和run方法的区别(这个一定要搞清楚)
- java实现多线程的方式以及run方法和start方法的区别