目录索引
线程的同步
当多个线程访问同一资源时,可能会造成资源的不同步,比如:可能由于网络延迟,导致A窗口卖票的时候看到有一张剩余,但其实已经被B窗口给卖出去了,所以此时的资源不同步。由此引出线程的同步处理
图中锁的功能可以用synchronized关键字来实现,利用此关键字可以定义同步方法或同步代码块,使此时操作只允许一个线程执行。
同步会使程序的整体性能降低
class MyThread implements Runnable {
private int ticket = 10 ; //总票数为10张
public synchronized boolean sale( ) {
//定义同步方法
if (this.ticket > 0) {
try {
Thread . sleep(100);//模拟网络延迟
} catch (InterruptedException e) {
e. printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"卖票,ticket="+this.ticket --);
return true ;
} else {
System. out . print1n("*****票已经卖光了 ****");
return false ;
}
}
@override
public void run() {
while (this.sale()) {
;
}
}
}
public class ThreadDemo {
public static void main(String[] args) throws Exception {
MyThread mt = new MyThread() ;
new Thread(mt, "票贩子A").start();
new Thread(mt, "票贩子B")