java多线程编程核心技术

来源:互联网 发布:ubuntu软件包管理器 编辑:程序博客网 时间:2024/06/04 19:25
1.停止线程的方法
    1.抛异常
    1.运用return
2.暂停线程与恢复
    1.Thread.suspend
    2.Thread.consume
3.暂时让出资源
    yield 让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。
4.释放资源并等待
  wait
5.休眠
   sleep
6.线程的优先级
  线程的优先级具体可继承性 A线程启动B线程,B线程的优先及与A一致
 优先级高并不一定先执行,只是先执行的概率比较大
7.守护纯程
  就像保姆一样,当非守护线程结束,守护线程结束
8.synchronized(特别:互斥性,可见性)
    1.锁的是对象而不是代码
    2.同一对象不同同步方法同步执行
    3.抛出异常,释放锁
    4.锁可以重入
    5.同步不具有继承性,所以在子方法中也需要加入同步
9.volatile
  主要的作用是变量在多个线程间可见
  volatile的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值
  最致命的缺点:不支持原子性
10.wait
   使当前执行代码的线程进行等待,需要获取锁的前提下,必需加同步锁synchronized
11.notify
   使停止的线程继续运行(随机挑一个),并不是马上释放锁,等同步代码块里的逻辑执行完方可
12.notifyAll
   使所有等待该资源的线程都处于就续状态,notifyAll()可以避免唤醒消费者生产者中的同类而处于假死状态,notify()可能又唤醒了生产者,生产者又需要等待消费者消费
13.join
    等待该线程执行完再执行其他线程
14.ThreadLocal
   使每个线程都绑定自己的值,每一个线程都有自己的共享变量
15.ReentrantLock
    相当于sysnchronzied功能
16.Condition
     RenntrantLock与condition结合可以实现选择性通知,比notifyAll/notify随机有选择权


  lock=new ReentrantLock();
  Condition condition=lock.newCondition();
  lock.lock();
  doSomething();
  condition.await();//condition.signal();
  lock.unlock();
17.公平锁(先到先得)与非公平锁(随机)


 18.tryLock
      仅在调用时锁定未被另一个线程保持的情况下才获取该锁定
 19.schedule和secheduleAtFixedRate特性
      schedule和secheduleAtFixedRate都是在上次任务执行完执行,如果上次任务延时也是这样,但sechecduleAtFixeRate会执行已经过了执行期的任务,schedule不会
原创粉丝点击