好吧,首先我承认我是菜鸟.
今天看完<多线程安全问题>视频后,自己仿照毕老师的代码写了一遍,但是运行结果却和毕老师的不大一样.- class Matter implements Runnable
- {
- private int i=100;
- public void run()
- {
- Object o=new Object();
- while(true)
- {
- synchronized(o)
- {
- if (i>1)
- {
- try
- {
- Thread.sleep(10);
- }
- catch (Exception e)
- {
- }
- System.out.println(Thread.currentThread().getName()+"----"+i--);
- }
- }
- }
- }
- }
- class ThreadTest
- {
- public static void main(String[] args)
- {
- Matter m=new matter();
- Thread t1=new Thread(m,"t1");
- Thread t2=new Thread(m,"t2");
- Thread t3=new Thread(m,"t3");
- Thread t4=new Thread(m,"t4");
- t1.start();
- t2.start();
- t3.start();
- t4.start();
- }
- }
复制代码 原则上说,如果多线程同时操作共享数据后,加上synchronized锁定了代码块,那么共享数据应该是从1到100每个数只打印一次,但是我运行后有些数却有打印两次的情况.
可能是因为我的电脑是双核处理器的,我想请问的是,如果这是由于多核处理器造成的问题,那么这个程序在多核处理器上应该怎么改进呢?
|