java技术--多线程概念探究

1.线程安全和非线程安全

(1)java面试中常见问答,如下:
      <1>ArrayList是非线程安全的,Vector是线程安全的;
      <2>HashMap是非线程安全的,HashTable是线程安全的;
      <3>StringBuilder是非线程安全的,StringBuffer是线程安全的
(2)非线程安全是指多线程操作同一个对象可能会出现问题
(3)线程安全则是多线程操作同一个对象不会有问题    
(4)线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低
(5)在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList  

2.非线程安全!=不安全

(1)非线程安全并不是多线程环境下就不能使用
      <1>多线程操作同一个对象(就是在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象)
      <2>如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的
 (2)线程安全的实现:通过线程同步控制来实现的
      <1>在并发量比较小的情况下,使用synchronized关键字
      <2>在并发量比较高的情况下,其性能下降会很严重,使用ReentrantLock
 (3)synchronized关键字和ReentrantLock区别
      <1>synchronized是在JVM层面实现的,因此系统可以监控锁的释放与否
      <2>ReentrantLock是使用代码实现的,系统无法自动释放锁,需要在代码中的finally子句中显式释放锁lock.unlock()

3.同步异步区别

(1)最大区别:同步需要等待,而异步无需等待   
(2)同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干别的事
      <1>同步是按顺序执行,执行完一个再执行下一个,需要等待、协调运行
      <2>同步可以避免出现死锁,读脏数据的发生
      <3>同步需要等待资源访问结束,浪费时间,效率低
      <4>同步是实现线程安全的方法
(3)异步:请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
      <1>异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作
      <2>异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情
      <3>线程就是异步实现的一个方式  
      <4>异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情  
      <5>异步则可以提高效率,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的,安全性较低

4.异步与多线程

(1)异步和多线程并不是一个同等关系,异步是最终目的,多线程只是实现异步的一种手段,一种方式
(2)实现异步可以采用多线程技术或则交给另外的进程来处理 
(3)多线程是用来并发的执行多个任务
     <1>比较容易的实现了异步切换的思想,因为异步的程序很难写的,但是多线很容易写, 相对效率也高
     <2>多线程可以实现线程间的切换执行
     <3>多线程本身还是以同步完成,效率是比不上异步的
(4)异步请求一般用在IO等耗时操作,异步有时优先级比主线程还高。这个特点和多线程不同

5.并发和并行

(1)并行是不同实体上的多个事件,并发是在同一实体上的多个事件
   <1>并行:在操作系统中,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的 
   <2>并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,
            且这几个程序都是在同一个   处理机上运行,但任一个时刻点上只有一个程序在处理机上运行
(2)单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主) 
   <1>要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)  
   <2>并发通常指提高运行在单处理器上的程序的性能
   <3>并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发
(3)在多CPU系统中,可以让两个以上的线程同时运行
   <1>这种可以同时让两个以上线程同时运行的方式叫做并行(parallel) 
   <2>在多处理器上的程序才可实现并行处理
(4)并发与并行实例
    <1>并发:交替做不同事情的能力
    例子:吃饭吃到一半,电话来了,你停下吃饭,接电话,接完电话后继续吃饭,支持并发
    <2>并行:同时做不同事情的能力
    例子:吃饭吃到一半,电话来了,你一边吃饭一遍接电话,支持并行   
    <3>顺序执行:吃饭吃到一半时,电话来了,你一直吃完饭才去接电话,既不支持并发也不支持并行 

6.异步,高并发,多线程

(1)多线程是异步的实现方式,是java的特性
(2)多线程对应的是cpu,高并发对应的是访问请求
(3)多线程是处理高并发的一种编程方法,即并发需要用多线程实现(多线程只是其中解决方法之一)
发布了143 篇原创文章 · 获赞 10 · 访问量 7560

猜你喜欢

转载自blog.csdn.net/qq591009234/article/details/103557760