【发布时间】:2016-09-11 23:38:43
【问题描述】:
问题是我没有看到同步块的效果。在理论上,我知道它应该锁定块,直到它完成它当时正在处理的线程。当我在有或没有同步块的情况下运行以下代码时,没有任何变化,至少我是这么认为的。基本上,如何使这些线程有序显示?请帮我清理一下,谢谢。
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();
}
}
【问题讨论】:
-
使用
System.out.println(...)不是一个好主意,因为此方法不是线程安全的(例如,不能保证输出的写入顺序与调用System.out.println(...)的顺序相同)。也许你想看看this tutorial。 -
两个线程在不同的对象上同步。
-
Re,“……没有任何变化。”这是描述您所看到的问题的一种非常弱的方式。这次你很幸运,但是在这个网站上获得帮助的最佳方式(即获得最佳帮助的方式)是向我们展示你的代码,详细告诉我们你认为它会做什么,告诉我们它是如何失败的以满足您的期望(包括任何意外错误消息的完整文本),然后询问我们出了什么问题。
-
P.S.:不要想到“同步线程”。考虑同步对共享数据的访问。
synchronized的整点阻止它,以防止线程看到(并且可能无法操作)由于其他线程的操作而处于无效状态的数据。
标签: java multithreading synchronization