一、线程的同步、异步
1、概念:
单线程与多线程
(1)单线程:one 每次只能做一件事情,要一件接着一件事情去做。
(2)多线程(并发):>=two 会发生多个线程抢占资源的现象,只有当抢占到资源之后,才会去执行(异步)。
所以在多线程编程中需要防止这些资源访问的冲突,Java提供了线程同步的机制来防止资源访问的冲突。
同步与异步
(1)同步:就像是一群人排队上公交车,一次只能上一个人,前面人上了之后后面的人才能接着上去(一件事情做完了之后才能去做另外一件事情)
(2)异步:就像是一群人上卡车,可以从卡车的周围同时上去(很多事情同时在做,只要能够占有系统资源)
说明:
异步的效率要比同步要高,但是异步会存在数据安全的问题。
2、代码说明(买票系统)
(1)通过实现Runnable接口(票数为10)
public class Demo02 implements Runnable{
//总票数
int num = 10;
@Override
public void run() {
while(true) {
if(num > 0) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()
+"抢到了第"+num--+"张票");
}
}
}
public static void main(String[] args) {
Demo02 d = new Demo02();
Thread t1 = new Thread(d,"飞猪");
Thread t2 = new Thread(d,"携程");
Thread t3 = new Thread(d,"黄牛");
t1.start();
t2.start();
t3.start();
}
}