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
感激不尽~~~ 展开
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
感激不尽~~~ 展开
2014-09-19 · 知道合伙人软件行家
关注
展开全部
代码写的就有问题
因为synchronized写在线程里了,也就是说,你new了多线程,它们都在执行自己的代码
而并不是多线程执行同一段代码,所以这里并没有起到同步的作用
你应该把这个方法放到线程的外面去(放你的App这个类),让多个线程去调用就能体现出来了
因为synchronized写在线程里了,也就是说,你new了多线程,它们都在执行自己的代码
而并不是多线程执行同一段代码,所以这里并没有起到同步的作用
你应该把这个方法放到线程的外面去(放你的App这个类),让多个线程去调用就能体现出来了
追问
但是lock是static的啊,对lock加锁应该是有效的吧
追答
但是同步代码写在线程里,也就是多线程都在执行自己的代码块,并不是多线程在执行同一段代码快
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询