java线程同步问题简洁实例源码介绍



java线程同步问题简洁实例源码介绍。

package wzq.j2se.thread;

/*
* java中同步的API
*
* StringBuffer 同步,线程安全的,但效率低
* 相当于synchronized append();
* StringBuilder 不同步,线程不安全的,效率高
* 相当于append();
*
* Victor HashTable 同步
* ArrayList HashMap 不同步
*
* 以上算法基本一样,只不过线程同步情况不同
*/

public class Threadsyn {
Object obj = new Object();
int i = 1;
/**
* @param args
*/
public static void main(String[] args) {
new Threadsyn().go();
}
public int getNumber(){
synchronized(obj){//只会有一个对象锁,一般用this.如果写在方法上,就是整个方法synchronized
if(i == 20){
throw new RuntimeException(“over”);
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
return i++;
}
}

class MyThread extends Thread{
public void run(){
while(true){
System.out.println(getNumber());
}
}
}
public void go(){
Thread t1 = new MyThread();
Thread t2 = new MyThread();
t1.start();
t2.start();
}

}