Core java 7 2-1 Multithreading

Thread proorityes:

   highly system dependent

   xp 系统有level,linux没有poriority 。 不能依靠priority来完成程序正确性。

   如果有好几个高priority的不会blocked的线程,容易出现低poriority线程饥饿现象。

 

Daemon Thread

   如果只剩daemon thread 虚拟机就会推出。(辅助线程,timer)

 

thread Group

    g.activeGroup() , a.interrupt();  (executors 可以不用group关闭一组线程)

 

Handlers for Uncaught Exceptions

      t.setDefaultUncaughtExceptionHandler(); 实现 UncauthtExceptionHandler Method

      如果没有提供handler,则调用threadGroup的。

 

Lock (jdk1.5引入)

lock(); unlock();

lock对象对应多个condition对象

lock.newConditiong();

 

     await()调用:

                    while( ! (ok of proceed)){   condition.await();};

     带可能引起conditoin变化的地方调用,conditon.signalAll();

 

一个线程调用了condition对象的await方法,那么就把命运交给了其他线程。如果其他地方没有调用condition的唤醒,那么这个线程将会一直阻塞,可能导致死锁。

 

synchronize关键字:

每个object都有一个隐藏的lock对象,用synchronize关键字就是隐式调用lock()和unlock();

调用wait()和notifyAll()就是显示调用隐藏lock对象的条件对象的await()和signalAll();

 

隐式Lock对象和Condition对象的drawback:

  !不能interrupt一个正在获取锁的线程。

  !不能给定一个获取锁的timeout

  !只有一个条件对象

  !虚拟机执行锁映射的效率问题。

advantages:

   虚拟机检测器可以报告lock和conditon的状况,对于调试deadlock来说很useful。

 

Monitor:

     Monitor是面向对象的一种同步概念:

         Monitor类只有private fields

         所有的方法都会获得Monitor默认的一个锁

      java的区别:

         Fields不强制要求是private

         不是所有方法都要求是synchronized

 

Synchronized Block

         Synchronized (lock){

           ......

          }

 

 为了使用对象的锁。(遗留代码)

 static 的方法也是可以同步的,这是他获取的是.class 对象的锁

 

Volatile Fields

private volatile boolean done;  //这样就不用锁了,默认加锁。 影响性能

 

死锁:

      公平锁:new ReentrantLock(true),不会出现饿死,严重影响性能,不推荐

      锁测试和超时:

          myLock.tryLock(long time, TimeUnit unit);  //有助于消除死锁

      读写锁:

           rwl = new ReentrantReadWriteLock();

           Lock readLock = rwl.readLock();

           Lock writeLock = rwl.writeLock();

 

为什么不用stop和suspend

   stop:会倒是对象处于不一致状态,刚执行一半。(不是有些人说的不会释放对象的锁,因为对象可以抛出ThreadDeath异常来释放所有的锁。

    suppend:不会释放对象的锁,很容易造成死锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值