当前位置: 代码迷 >> J2SE >> 有关多线程的有关问题
  详细解决方案

有关多线程的有关问题

热度:13   发布时间:2016-04-24 01:10:13.0
有关多线程的问题
Java code
public class TestSync implements Runnable {    Timer t = new Timer();        public static void main(String[] args) {        TestSync ts1 = new TestSync();        TestSync ts2 = new TestSync();        Thread t1 = new Thread(ts1);        Thread t2 = new Thread(ts2);        t1.setName("t1");        t2.setName("t2");        t1.start();        t2.start();        // TODO Auto-generated method stub    }        public void run(){        t.add(Thread.currentThread().getName());            }}class Timer{    private static int num = 0;    public synchronized void add(String name){        //synchronized (this){        num ++;        try{            Thread.sleep(1);        }catch(InterruptedException e){}        System.out.println(name + ",你是第" + num + "个使用timer线程");    }    //}}


调试2次,每次结果竟然是不一样的?这是为啥子嘛?????
第一次是这样滴:
t1,你是第2个使用timer线程
t2,你是第2个使用timer线程
第二次是这样滴:

t2,你是第2个使用timer线程
t1,你是第2个使用timer线程


都是第二个使用timer线程,不应该的呀,应该一个第一个使用,一个第二个使用啊!!!!!!!!

------解决方案--------------------
你new了两TestSync,每个TestSync操作各自的Timeer,所以根本没同步,这也是导致都输出两个“第2个”的原因,你多运行几次一定会看到“第1个”的,即使看到第一个和第二个也不是线程安全的,只是凑巧了。。so,lz还是改逻辑为好。。
  相关解决方案