问题在于我没有看到同步块的效果。在理论上,我知道它会锁定块,直到它完成它当时正在处理的线程。当我使用或不使用synchronized块运行以下代码时,没有任何变化,至少这是我的想法。基本上,我如何使这些线程有序地显示?请把它清理一下,谢谢。
public class Threads9 extends Thread{
private String name;
public Threads9(String paramName){
name = paramName;
}
public void run() {
print();
}
private void print() {
synchronized(this){
for(int i = 0;i<10;i++){
System.out.println(name+ " looping");
}
}
}
}
public class Threads9Main{
public static void main(String[] args) {
Threads9 thread1 = new Threads9("Thread1");
Threads9 thread2 = new Threads9("Thread2");
thread1.start();
thread2.start();
}
}
答案 0 :(得分:1)
您正在同步“this”,并且线程之间有所不同。 尝试同步:Threads9.class,它会工作。 此外,大幅增加循环大小,或者第一个将在第二个开始之前完成。
答案 1 :(得分:0)
您的对象没有共享监视器,因此您不会进行任何线程间通信。
尝试:
public class Threads9 extends Thread{ private String name;
private static Object lock = new Object();
public Threads9(String paramName){
name = paramName;
}
public void run() {
print();
}
private void print() {
synchronized(lock){
for(int i = 0;i<10;i++){
System.out.println(name+ " looping");
}
}
}
}
答案 2 :(得分:0)
像这样更改代码并将synchronized块放入运行中。
public Threads9(String paramName){
name = paramName;
}
public void run() {
synchronized(this){
print();
}
}
private void print() {
for(int i = 0;i<10;i++){
System.out.println(name+ " looping");
}
}