【发布时间】:2020-05-25 19:44:23
【问题描述】:
在处理生产者消费者问题时,我偶然发现了一个场景,我可以在“sharedLinkedList”字段或“SharedObject”类的整个对象“this”上进行同步。 “sharedLinkedList”是生产者和消费者线程将要处理的字段。
请用Produce方法找一个类的sn-p:-
public class SharedObject {
LinkedList<Integer> sharedLinkedList = new LinkedList<Integer>();
int capacity = 5;
public void produce() {
while (true) {
synchronized (sharedLinkedList) {// Alternately synchronized(this)
try {
while(sharedLinkedList.size() == capacity){
sharedLinkedList.wait();//Alternately this.wait()
}
} catch (InterruptedException e) {
e.printStackTrace();
}
sharedLinkedList.add(123);
sharedLinkedList.notify();//Alternately this.notify
}
}
}
}
这两种方法都有效。
1.在“sharedLinkedList”字段上同步 2。在整个对象上同步(作为注释放在代码 sn-p 中)。
哪种方法更好,为什么?
【问题讨论】:
标签: java multithreading synchronized