• java_day16_读写锁,fork-join框架


    线程安全---锁

    一,ReentrantReadWriteLock:可重入读写锁

      1,这个类提供了数据写入锁方法 lock.writeLock(); 数据读取锁lock.readLock();

      2,示例代码:

        private ReentrantReadWriteLock lock = new ReentrantReadWritaLock();

        public void fun1(){

          lock.writeLock().lock();//写锁锁上

          //写入操作的代码

          lock.writeLock.unlock();//写锁打开

        }

        public void fun2(){

          lock.readLock().lock();//读锁锁上,但是可多线程同时读

          //读取操作的代码

          lock.readLock().unlock();//读锁打开

        }

    二,fork-jion框架

      1.jion:调用线程的jion方法,可以让当前线程等待线程对象执行完毕后再继续执行

      2,jion中可以传入参数(long millis , int nanos),表示等待的时长

      3,fork-jion框架:来解决执行效率,手段是并行,但是是拆分型的并行!如果一个应用能被分解成多个子任务,并且组合多个子任务的结果就能够获得最终的答案,那么这个应用就适合用 Fork/Join 模式来解决。

    三,yield,sleep和wait-notify

      1,yield:线程内调用yield方法,表示该线程想要放弃cpu的资源(即我不重要,可先执行其他线程),但是具体cpu是否会放弃它,由cpu决定.

      2,sleep:线程内调用sleep方法可以强制让当前线程休眠,Thread.sleep(long millis)和Thread.sleep(long millis, int nanos).

      3,wait-notify:wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”).notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程。wait(long timeout)让当前线程处于“等待(阻塞)状态”,“直到其他线程调用此对象的notify()方法或 notifyAll() 方法,或者超过指定的时间量”,当前线程被唤醒(进入“就绪状态”)。

      4,wait和sleep的区别

        1).wait是Object类的方法,任何对象都有,而sleep是Thread类的方法

        2).wait必须写在Synchronized代码块中,并且必须是锁对象调用wait方法,而sleep没有限制(不需要Synchronized)

        3).wait会释放锁对象,而sleep没有限制

        4).wait可以被别的线程唤醒,而sleep需要等待时间结束  

      

      

  • 相关阅读:
    安装VMWare tools 及安装后/mnt中有hgfs但没共享文件的解决办法
    linux挂载命令
    RHEL7/CentOS7 Network Service开机无法启动的解决方法
    linux消息队列编程实例
    Linux进程间通信——使用消息队列
    消息队列函数
    ipcs查看消息队列命令
    linux批量删除
    HTTP 请求消息头部实例:
    drf 序列化组件
  • 原文地址:https://www.cnblogs.com/memo-song/p/8877575.html
Copyright © 2020-2023  润新知