java多线程的同步与异步,详细解析

java关于多线程的内容还是比较多的,而且知识点也是非常复杂的。今天就来为大家介绍一下,java多线程的同步与异步,一起来了解一下吧。

多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了A线程处理的数理。

显然这是由于全局资源造成的,有时为了解决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲系统处理性能,加在多线程并发时资源挣夺最激烈的地方,这就实现了线程的同步机制。

具体内容如下:

1.多线程 同步

A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去

2.异步

A线程要请求某个资源,但是此资源正在被B线程使用中,因为没有同步机制存在,A线程仍然请求的到,A线程无需等待

3.特点

显然,同步是最安全,最保险的。而异步不安全,容易导致死锁,这样一个线程死掉就会导致整个进程崩溃,但没有同步机制的存在,性能会有所提升

4.线程池

要知道在计算机中任何资源的创建,包括线程,都需要消耗系统资源的。在WEB服务中,对于web服务器的响应速度必须要尽可能的快,这就容不得每次在用户提交请求按钮后,再创建线程提供服务。

为了减少用户的等待时间,线程必须预先创建,放在线程池中,线程池可以用HashTable这种数据结构来实现,看了Apach HTTP服务器的线程池的源代码,用是就是HashTable,KEY用线程对象,value 用ControlRunnable,ControlRunnable是线程池中唯一能干活的线程,是它指派线程池中的线程对外提供服务。

出于安全考虑,Apach HTTP服务器的线程池它是同步的。

5.关键字

thread(线程)、thread-safe(线程安全)、intercurrent(并发的)

synchronized(同步的)、asynchronized(异步的)、

volatile(易变的)、atomic(原子的)、share(共享)

以上就是关于java多线程的同步与异步的详细解析了。可以看出知识点还是比较多的。如果你对java知识感兴趣,想要了解更多java基础知识,敬请关注奇Q工具网。

推荐阅读:

java多线程同步ThreadLocal类,实例分享

java多线程同步之重入锁,详细解析

java多线程同步,Volatile详解