Java线程:线程的同步 - 编程入门网
ons.synchronizedList(new LinkedList());
public void add(String name) {
nameList.add(name);
}
public String removeFirst() {
if (nameList.size() > 0) {
return (String) nameList.remove(0);
} else {
return null;
}
}
}
public class Test {
public static void main(String[] args) {
final NameList nl = new NameList();
nl.add("aaa");
class NameDropper extends Thread{
public void run(){
String name = nl.removeFirst();
System.out.println(name);
}
}
Thread t1 = new NameDropper();
Thread t2 = new NameDropper();
t1.start();
t2.start();
}
}
Java线程:线程的同步(5)时间:2010-12-08 BlogJava Werther虽然集合对象 private List nameList = Collections.synchronizedList(new LinkedList()); 是同步的,但是程序还不是线程安全的。 出现这种事件的原因是,上例中一个线程操作列表过程中无法阻止另外一个 线程对列表的其他操作。 解决上面问题的办法是,在操作集合对象的NameList上面做一个同步。改写 后的代码如下:
这样,当一个线程访问其中一个同步方法时,其他线程只有等待。 七、线程死锁 死锁对Java程序来说,是很复杂的,也很难发现问题。当两个线程被阻塞, 每个线程在等待另一个线程时就发生死锁。 还是看一个比较直观的死锁例子:
假设read()方法由一个线程启动,write()方法由另外一个线程启动。读线程 将拥有resourceA锁,写线程将拥有resourceB锁,两者都坚持等待的话就出现死 锁。 实际上,上面这个例子发生死锁的概率很小。因为在代码内的某个点,CPU必 须从读线程切换到写线程,所以,死锁基本上不能发生。 但是,无论代码中发生死锁的概率有多小,一旦发生死 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |