多线程

1.多线程的特性,使用场景,缺陷

  多线程的特性:并发,并行,时间片轮转调度

  多线程的使用场景:在处理多个任务的时候使用,并且部分代吗堵塞的状况不影响后序代码的执行.

  优缺点:可以提高cup的使用效率,在粗盘读取内容的时候大多数的cup需要花费大量的时间来去去读数据,在这个时候cup大多是都是空闲的,可以使其他的cup来执行别的任务,可以提高效率的.

       如果有大量的线程,这个时候回影响效率的,因为这个时候需要创建线程,切换,消除.都是比较消耗系统资源得.

     更多的线程需要更多的内存资源

2.在使用多线程需要注意的点.

    在使用多线的时候需要考虑效率的问题,还要考虑共享变量的安全问题.

3.多线程的安全问题

    在多个线程共同执行一端代码块的时候需要更新数据的时候,我们需要加上一个锁,在多个线程共同去访问的时候我们只允许一个线程访问完了之后另外一个线程去访问.

    在访问共享变量的时候我们需要加上一个volatie关键字,禁止指令的重排序和可见性,简历内存的屏障.

4.多线程之间的通信

    在多核线程之间的通信我们使用wait()和notify()或者notifyAll()的三个方法来实现.

    wait()方法,当前线程进入堵塞的状态,释放对象锁.

    notify()方法执行完这片3代码块之后释放对象锁,通知在同步队列中的等待队列竞争对象锁,如果wait()内的线程抢到对象锁之后继续往下执行.

    notifyAll()方法和notify()方法几乎是一样的,而notifyAll(0方法是通知所有的线程,而notify(0方法只通知一个线程.

5.CAS Compara and swap比较并交换.

    CAS主要的作用是又换多线程的一个方案.

    在多个线程同时执行,一块代码块的时候,并不是进行堵塞等待的,而是并发的都在执行,他们是将主内存中的共享变量复制到工作内存中,之后进行对变量的更改,之后写回到主内存中,在这期间需要复制的变量和主内存中的变量进行比较如果相等放回true.写回,如果比较不相等返回false.

    CAS这是一个乐观锁的实例.

6.CSA的底层实现原理

    cup+操作系统+jdk中的unsafe类

7.乐观锁和悲观锁

    这只是一种设计上的思想

    乐观锁:在很多时候乐观锁认为数据一般不会产生冲突,所以在数据更新提交的时候,才会对数据产生冲突进行检验如果发现冲突,返回一个错误的信息,之后交个用户决定是否修改

    悲观锁:总是假设最坏的情况,认为数据都可能产生冲突,每次对数据修改的时候都加上一个锁,别人不可以进来修改,当自己修改完成只会别人才可以来进行修改.

8.synchchronizd的底层是实现原理

    monitor机制:在java编程成字节码文件的时候生成了monitorenter 命令和monitorexit 命令,还有程序记重器.

    执行同步代码块的时候首先需要执行的是monitorenter这个命令,之后程序退出的时候需要执行的是monitorexit这个命令.

    

posted @ 2020-06-29 15:02  哈哈,呵呵,嘿嘿  阅读(115)  评论(0)    收藏  举报