public class MyRunnable implements Runnable { private Foo foo = newFoo();
public static void main(String[] args) { MyRunnable r = new MyRunnable(); Thread ta = new Thread(r, "Thread-A"); Thread tb = new Thread(r, "Thread-B"); ta.start(); tb.start(); }
public class Test { public static void main(String[] args) { final NameListnl = new NameList(); nl.add("aaa"); classNameDropper extends Thread{ public void run(){ Stringname = nl.removeFirst(); System.out.println(name); } }
Thread t1 = new NameDropper(); Thread t2 = new NameDropper(); t1.start(); t2.start(); } }
虽然集合对象
private List nameList =Collections.synchronizedList(new LinkedList()); 是同步的,但是程序还不是线程安全的。
出现这种事件的原因是,上例中一个线程操作列表过程中无法阻止另外一个线程对列表的其他操作。
解决上面问题的办法是,在操作集合对象的NameList上面做一个同步。改写后的代码如下:
public class NameList { private List nameList =Collections.synchronizedList(new LinkedList());
public synchronized void add(String name) { nameList.add(name); }
Java线程:线程的同步与锁一、同步问题提出线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。public class Foo { private int x = 100; public int getX() { retu