Java多实例多线程同步加锁的问题 5

packagecom.maven.testproject2.testweb2;publicclassApp{publicstaticvoidmain(String[]ar... package com.maven.testproject2.testweb2;

public class App {

public static void main(String[] args) {
System.out.println("Hello World!");
Test t1 = new Test("1", 1);
t1.start();
Test t2 = new Test("2", 2);
t2.start();
Test t3 = new Test("3", 3);
t3.start();
}
}

class Test extends Thread {
private static String lock = "0";
private int age;

public Test(String lock, int age) {
Test.lock = lock;
this.age = age;
}

public void printAge() {
synchronized (lock) {
while (true) {
System.out.println(Thread.currentThread().getName() + ":age="
+ age + ",lock=" + lock);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
}

public void run() {
System.out.println(Thread.currentThread().getName() + ":in");
printAge();
}

}

为什么会有时候出现这样的运行结果呢,已经while(true)了,一旦一个线程占有了后又不会释放lock,为啥能出现两个线程交替执行的现象呢,结果如下。。。

Hello World!
Thread-0:age=1,lock=3
Thread-2:age=3,lock=3
Thread-2:age=3,lock=3
Thread-0:age=1,lock=3
Thread-0:age=1,lock=3
Thread-2:age=3,lock=3
Thread-0:age=1,lock=3
Thread-2:age=3,lock=3
Thread-0:age=1,lock=3
Thread-2:age=3,lock=3

感激不尽~~~
展开
 我来答
QQMSD8
2014-09-19 · 知道合伙人软件行家
QQMSD8
知道合伙人软件行家
采纳数:6788 获赞数:13239
没有做不到,只有想不到,帮助别人的同时也是对自己的提升

向TA提问 私信TA
展开全部
代码写的就有问题
因为synchronized写在线程里了,也就是说,你new了多线程,它们都在执行自己的代码

而并不是多线程执行同一段代码,所以这里并没有起到同步的作用
你应该把这个方法放到线程的外面去(放你的App这个类),让多个线程去调用就能体现出来了
追问
但是lock是static的啊,对lock加锁应该是有效的吧
追答
但是同步代码写在线程里,也就是多线程都在执行自己的代码块,并不是多线程在执行同一段代码快
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式