线程同步处理-synchronized
Java中提供有synchronized关键字用以实现同步处理,同步的关键是要为代码加上“锁”,而对于锁的操作程序有两种:同步代码块、同步方法。
同步代码块是指使用synchronized关键字定义的代码块,在该代码执行时往往需要设置一个同步对象,由于线程操作的的不确定状态,所以这个时候的同步对象可以选择this.
范例:使用同步代码块
package duoxian;
public class Myrun implements Runnable {
private int nub=6;
@Override
public void run() {
while (true) {
synchronized (this) {
if (nub > 0) {
try {
Thread.sleep(100); //模拟网络延时
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ", nub=" + nub--);
} else {
System.out.println("****票卖光了*****");
break;
}
}
}
}
}
范例:使用同步方法
package duoxian;
public class Myrun implements Runnable {
private int nub=6;
@Override
public void run() {
while (this.size()) {
}
}
public synchronized boolean size() {
if (nub>0){
try {
Thread.sleep(100);
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+", nub="+nub--);
return true;
}else {
System.out.println("****已售空*****");
return false;
}
}
}
package duoxian;
public class ThreadDemo {
public static void main(String[] args) {
Myrun my=new Myrun();
new Thread(my,"售票A").start();
new Thread(my,"售票B").start();
new Thread(my,"售票C").start();
new Thread(my,"售票D").start();
}
}