春招修仙系列 —— 线程的同步、异步、互斥

概述:

一个多线程的程序,两个或者多个线程可能需要访问同一个数据源,这时就必须考虑数据安全的问题,而线程的同步、互斥,就是保证数据安全的机制

互斥:

当多个线程需要访问同一资源时,需要在一个时间端内只允许同一个线程来操作共享资源,操作完毕后别的线程才能读取该资源,这叫作线程互斥,在java中,我们可以通过synchronized来给公共区域加锁,确保数据的安全。(除此之外还有Lock实现类等)

同步:

在某些情况下,线程需要交替执行,比如一个线程向一个存储单元执行存放数据,而另一个操作执行取值的操作,线程间同步完成这个存取任务。著名的同步问题就是生产者消费者问题。可以用 wait() notify() notifyAll()来实现,也可以使用JUC下的同步容器来实现,如BlockingQueue、CountDownLatch、CyclicBarrier等。

异步:

指线程A在执行时,线程B可以不用等待A的执行结果,直接执行,等待A执行完毕之后,再通过回调等方法,将结果进行显示,在JavaScript中,这种机制经常存在(因为JS是跑单线的,没有办法并发执行,所有为了执行效率,常常使用异步的方式执行),著名的Ajax也是异步的一种实现。

猜你喜欢

转载自blog.csdn.net/Kirito19970409/article/details/86570320
今日推荐