黑马程序员——多线程(二)

-----------android 培训 java培训 、java学习型技术博客、期待与您交流!------------
一、线程的俩个方法
yield:理论上让出cpu,但是支持的不够好
setPriority():设置执行的优先级
单例设计模式:保证类在内存中只有一个对象。
如何保证类在内存中只有一个对象呢?
1.控制类,不让其他类来创建本类对象
2.定义一个本类对象。
3.提供共有的方法对象的方法
二、单列写法有俩种
/*饿汉式
 * class Singleton{
//私有化其构造函数
private Singleton(){}
//创建本类私有实例对象
private static Singleton s = new Singleton();
public static Singleton getInstance(){
return s;
}
}*/
//懒汉式
class Singleton {
private Singleton(){}
private static Singleton s;
public static Singleton getInstance(){
if(s == null){
s = new Singleton();
}
return s ;
}
}
//单列模式的第三种办法
class Singleton1{
private Singleton1(){}
private final Singleton1 s = new Singleton1();


}
Runtime类是一个单例类
public class Demo4_Runtime {


/**
* @param args
* Runtime 是一个单例类
* @throws IOException 
*/
public static void main(String[] args) throws IOException {
Runtime r = Runtime.getRuntime();
//r.exec("shutdown -s -t 300"); //计算机在300秒后关闭
r.exec("shutdown -a"); //取消计算机关闭
}


}

三.线程之间的通信
 1.什么时候需要通信
 多个线程并发执行时, 在默认情况下CPU是随机切换线程的
如果我们希望他们有规律的执行, 就可以使用通信, 例如每个线程执行一次打印
 2.怎么通信
 如果希望线程等待, 就调用wait()
      如果希望唤醒等待的线程, 就调用notify();
      这两个方法必须在同步代码中执行, 并且使用同步锁对象来调用
 3.多个线程通信的问题
      notify()方法是随机唤醒一个线程
      notifyAll()方法是唤醒所有线程
      JDK5之前无法唤醒指定的一个线程
      如果多个线程之间通信, 需要使用notifyAll()通知所有线程, 用while来反复判断条件
多生产者和消费者 JDK1.5版本升级版。
Lock接口    
 Lock 替代了synchronized 
 Condition 替代了 Object监视器方法


好处:将同步synchronized 替换成了 Lock
     
将object中的wait notify notifyAll 替换成了 Condition对象
      该对象可以Lock锁进行获取。一个锁可以对应多个Condition对象
注意:释放锁的工作一定要执行

示例代码


private Lock lock=new ReentrantLock();
private Condition condition =lock.newCondition();


public void cet(String name ) throws 
{
    lock.lock();
    try
    {
      while(flag)
            contidition.await();
        this.name=name+"--"+count++;


        sop(Thread.currentThread().getName()+"...生产者..."+this.name)
        flag=true;
        condition.signalAll();


    }
    finally
    {
        lock.unlock();
         
    }
}
特殊情况,改变标记也不会停止的情况。
将处于冻结状态的线程恢复到运行状态。interrupt();  中断线程。
守护线程:
SetDaemon将线程标记为守护线程或用户线程。在启动线程前调用 。当线程都为守护线程后,JVM退出。
JOin方法:
t.join();抢过cpu执行权。
当A线程执行到了B线程的join方法时,A就会等待,等B线程执行完,A才会执行。Join可以用来临时加入线程执行。
优先级:
SetPriority(1-10)设置优先级。
Thread.MAX_PRIORITY 10
Thread.MIN_PRIORITY 1
Thread.NORM_PRIORITY 5
yield方法:暂停当前正在执行的线程对象,并执行其他线程。
开发中应用::保证以下三个代码同时运行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值