首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

有关多线程的有关问题

2012-05-04 
有关多线程的问题Java codepublic class TestSync implements Runnable {Timer t new Timer()public st

有关多线程的问题

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还是改逻辑为好。。

热点排行