其他分享
首页 > 其他分享> > 2022-8-4 第八组 曹雨

2022-8-4 第八组 曹雨

作者:互联网

LockSuppport工具类:(线程阻塞的工具类)

所有的方法都是静态方法,可以让线程在任何位置阻塞之后也有唤醒的方法。

park与parking:

如果我们把Thread看成一辆车,park就是把车停下,unpark就是让车开走。

 public static void main(String[] args) throws InterruptedException {
    Runnable runnable = () ->{
      synchronized (OBJ){
          System.out.println("线程"+Thread.currentThread().getName()+"正在执行");
          LockSupport.park("我被阻塞了");
          if (Thread.currentThread().isInterrupted()){
              System.out.println("被中断了");
          }
          System.out.println("继续执行");
      }
    };

1、park不需要获取某个锁
2、因为中断park,不会抛出异常,需要在park之后自行判断中断状态,然后再做额外的处理
3、类似于wait,和notify,不能与他们交叉使用
4、他们两个不会涉及死锁
5、block的作用是看到对象的信息

Lock锁:

 Lock lock = new Lock() {
    @Override
    public void lock() {
        try {
            //正常处理异常的解决方案
        }catch (Exception e){
            //出现异常的解决方案
        } finally {
          //手动释放锁
          lock.unlock();
        }
    }

sychronized和Lock的区别:
Lock以下功能是synchronized不具备的!
ReentrantReadwriteLock :
对于一个应用而言,一般情况下读操作远远多于写的操作,如果仅仅是读的操作没有写的操作,数据又是线程安全,读写锁给我们提供了一种锁,读的时候可以很多线程一起读,但是不能有线程写,写是独占的,当有线程在执行写的操作,其他线程既不能读,也不能写。

并发编程三大特性:

线程池:

为什么要创建线程池?

JDk自带的四种线程池可通过Excutors提供的。

参数的意义(重要):

常见的工作队列:

线程池提供了四种拒绝策略:

重点掌握:

总结:

多线程的学习,在今天结束了。感觉知识点很多,很杂。有关于锁的部分,在老师这几天的演示中,我看到了好多种锁的方式,感觉有些搞不清楚。对锁的理解也不是特别的透彻,只知道锁是为了让一个线程工作时,另一个线程不工作。但是具体的多种用法,搞得不是很清楚。

标签:曹雨,Lock,park,第八,阻塞,任务,线程,2022,创建
来源: https://www.cnblogs.com/figh466/p/16549779.html