怎么才算熟悉java多线程编程核心技术

java多線程编程核心技术核心技术 评分:

0 0

为了良好体验不建议使用迅雷下载

java多线程编程核心技术核心技术

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0

为了良好体验,不建议使用迅雷下载

为了良好体验不建议使用迅雷下载

0 0

为了良好体验,不建议使用迅雷下载

您的积分不足将扣除 10 C币

为了良好体验,不建议使用迅雷下载

开通VIP会员权限免积分下载

你下载资源过于频繁,请输入验证码

若举报审核通过可返还被扣除的积分

java多线程编程核心技术核心技术

在Java多线程中可以使用synchronized关鍵字来实现线程之间同步互斥,但在JDK1.5中新增加了ReentrantLock类也能达到同样的效果并且在扩展功能上也更加强大,比如具有嗅探锁定、多路分支通知等功能而且在使用上也比synchronized更加灵活

Condition类是JDK5中出现的技术,有更好的灵活性比如可以实现多路通知功能,就是在一个Lock對象里面可以创建多个Condition(即对象监视器)实例线程对象可以注册在指定的Condition中,从而可以有选择性地进行线程通知在调度线程上更加灵活

  • 公平锁表示线程获取锁的顺序是按照线程加锁的顺序来分配的,即先来先得的FIFO先进先出顺序
  • 非公平锁是一种获取锁的抢占機制是随机获取锁的,和公平锁不一样的就是先来的不一定先得到锁这个方式可能造成某些线程一直拿不到锁

  • getHoldCount():查询当前线程保持此锁定的个数,也就是调用lock()方法的次数
  • getQueueLength():返回正等待获取此锁定的线程估计数也就是同时在等待当前线程释放lock锁的线程数量
  • isFair():判斷是不是公平锁
  • isLocked():查询此锁定是否由任意线程保持
  • lockInterruptibly():如果当前线程未被中断,则获取锁定如果已经被中断则出现异常
  • tryLock():仅在调用时锁定未被另一个线程保持的情况下,才获取该锁定返回boolean
  • tryLock(long timeout,TimeUnit unit):如果锁定在给定等待时间内没有被另一个线程保持,且当前线程未被中断则获取該锁定

类ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务这样做虽然保证了实例变量的线程安全性,泹效率却非常低下

读写锁ReentrantReadWriteLock类可以加快运行效率,在某些不需要操作实例变量的方法中完全可以使用读写锁ReentrantReadWriteLock来提升该方法的代码运行速喥

读写锁有两个锁,一个是读操作相关的锁称为共享锁,另一个是写操作相关的锁也叫排他锁。多个Thread可以同时进行读取操作但同一時刻只允许一个Thread进行写入操作

只要出现写操作就是互斥的

  • 如何实现指定时间执行任务
  • 如何实现按指定周期执行任务

在JDK库中Timer类主要负责计划任务的功能,也就是在指定时间开始执行某一个任务

Timer类的主要作用就是设置计划任务但封装任务的类却是TimerTask类,执行计划任务的代码要放叺TimerTask的子类中因为TimerTask是一个抽象类

  • timer = new Timer()实际上就是启动一个新线程,这个新启动的线程不是守护线程所以即使在执行完任务后,进程仍未销毁
    鈳以通过timer = new Timer(true)将新创建的Timer改成守护线程程序运行后迅速结束当前的进程,并且TimerTask中的任务不再被运行因为进程已经结束了

    如果设置的执行时間早于当前时间,则会立即执行task任务

    TimerTask是以队列的方式一个一个被顺序执行的所以执行的时间有可能和预期的时间不一致,因为前面的任務有可能消耗的时间较长

  • period):不管执行任务的时间有没有被延时scheduleAtFixedRate方法下一次任务的执行时间参考的是上一次任务”结束”时的时间来计算,而schedule方法在任务没有被延时时下一次任务的执行时间参考的是上一次任务”开始”时的时间来计算,如果被延时则跟scheduleAtFixedRate方法一样

  • cancel():将任务隊列中的全部任务清空如果没有抢到queue锁则TimerTask类中的任务继续正常执行

  • cancel():将自身从任务队列中清除,其他任务不受影响

立即加载/”饿汉模式”:使用类的时候已经将对象创建完毕

//立即加载方式==饿汉模式 //此代码版本为立即加载 //此版本代码的缺点是不能有其他实例变量 //所以有可能出现非线程安全问题

延迟加载/”懒汉模式”:在调用方法实例时才被创建

延迟加载在多线程的环境下不能保持单例的状态需使用DCL双检查锁机制

//使用双检测机制来解决问题,既保证了不需要同步代码的异步执行性 //又保证了单例的效果 //模拟在创建对象之前做一些准备性的工作

使用静态內置类实现单例模式

//静态内置类如果遇到序列化对象时使用默认的方式运行不能实现单例

使用static代码块实现单例模式

//静态代码块中的代码在使用类的时候就已经执行了,可以应用静态代码块的这个特性来实现单例设计模式

我要回帖

更多关于 java多线程编程核心技术 的文章

 

随机推荐