`
chairmanMao
  • 浏览: 16107 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Java多线程问题

 
阅读更多
代码:
public class Test_03 {
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		TxtThread tt = new TxtThread();
		new Thread(tt).start();
		new Thread(tt).start();
		new Thread(tt).start();
		new Thread(tt).start();
	}
}

class TxtThread implements Runnable {
	int num = 20;
	String str = new String();
	public void run() {
		while (true) {
			synchronized (str) {//这里的锁?
				if (num > 0) {
					try {
						Thread.sleep(10);
					} catch (Exception e) {
						e.getMessage();
					}
					System.out.println(Thread.currentThread().getName()
							+ "this is " + num--);
				}
			}
		}
	}
}

输出结果是1到20的乱序排列
我的疑惑是这样的:
我认为变量num,str是一个线程的私有部分,因此在创建线程时,每创建一个线程,该线程都有num,str变量的副本,各自相互独立,因此在此用synchronized控制没有意义,也不会有效果,理论上的输出结果应是4个1到20的乱序排列
(好吧,从输出结果上看俺错得比较离谱,但我觉得我想法上没什么问题啊,大家给点指导见吧!)
分享到:
评论
2 楼 simplemx 2012-06-12  
只有一个runable实例 放在4个线程里面跑。
1 楼 simplemx 2012-06-12  
你的理解是对的,但是这里只有一个线程的实例。

相关推荐

Global site tag (gtag.js) - Google Analytics