/**
- 自定义执行单元的两种方式
- 区别
- runnable避免了单继承的局限性
- runnable资源可以被独立共享
- 多线程如何找问题
1.明确哪些代码是多线程运行代码
2.明确哪些是共享数据
3.明确多线程代码中哪些语句是操作共享数据的 - @author WangShuang
- /
public class Test {
public static void main(String[] args) {
/MyThread t0=new MyThread();
MyThread t1=new MyThread();
t0.start();
t1.start();//出现两百张票
*/
//t0.start();//java.lang.IllegalThreadStateException/*MyRunnable r=new MyRunnable(); Thread rt0 = new Thread(r); Thread rt1 = new Thread(r); rt0.start(); rt1.start();*/
}
}
/** - 方式1继承Thread
- 如果想实现两个窗口买票的话
- MyThread t0=new MyThread();
MyThread t1=new MyThread();
t0.start();
t1.start();//出现两百张票
如果在tick前面加static能解决问题,但是生命周期又太长,所以采用方式2 - @author Administrator
- /
class MyThread extends Thread{
/static 加static不好 生命周期太长*/ int tick = 100;br/>@Override
public void run() {
while(tick>0){
System.out.println(tick--);
}
}
}
/** - 方式2实现Runnable接口
- @author Administrator
- */
class MyRunnable implements Runnable {
int tick = 100;br/>@Override
public void run() {
synchronized (new Object()) {
while(tick>0){
System.out.println(" "+this.toString());
System.out.println(Thread.currentThread().getName()+" "+tick--);
}
}
}
}
原文地址:http://blog.51cto.com/13579086/2065918
时间: 2024-10-08 14:06:05