黑马程序员-----并发

------- android培训java培训、期待与您交流! ----------


概念:

线程是最小的控制和执行单元,线程存在与进程里,每个进程拥有至少一个或多个线程。


创建线程有2种方法:

一种方式是继承Thread类,覆盖run方法

Class ThreadCase extends Thread{

    public void run(){

        //dosomething

    }

}


产生并执行一个线程则是调用Thread的start()方法

new ThreadCase().start()

!直接调用run()方法可以执行run()方法内部的代码,但是无法产生一个新线程,和普通方法没有区别。


 

创建线程的另一种方式是继承Runnable接口,实现run方法

 

Class RunableCase implements Runnable{
    public void run(){
        //dosomething
    }
}


将Runnable实现对象传进Thread类的构造方法

new Thread(new RunnableCase()).start();


与直接继承Thread类不同,Runnable接口避免了单继承的局限性(!java中只允许继承一个类,但是可以实现多个接口)


多线程的特性,随机性,CPU决定执行哪个线程,顺序不确定


冻结进程有两种方式

sleep(time)----》知道时间

wait()-----》notify()直到用notify唤醒,否则线程一直等待(阻塞);


挂掉进程

stop()


多线程总会产生线程安全问题

可以使用同步代码快来解决

synchronized(Object)
{}


同步的前提:

1.必须要有两个以上的线程

2.必须是多个线程使用同一个锁

弊端:多个线程需要判断锁,较为消耗资源


同步方法没有传入对象锁,同步方法用到的锁是方法所在的类的实例---->this

静态同步方法使用的锁是所在类的字节码对象

ClassName.class


饿汉式线程安全,懒汉式可以实现延迟加载,但是会产生线程安全问题,需要使用同步

 

同步会出现死锁的情况,

死锁一般出现在同步中

同步嵌套死锁


线程间通信:

其实就是操作同一资源,但操作动作不同


等待唤醒机制

wait()
notify()

这些方法都需要监视器所以只能存在与同步中

Objectkey.wait()
Objectkey.notify()
Objectkey.notifyAll()


JDK5中

显式的Lock替代了schronized解决方案

condition替代了Object中的wait notify和notifyAll


在新特性中,一个lock可以被N个condition绑定

这样不同的condition可以改变不同的线程状态

lock lock=new ReentrantLock();
Condition cond = lock.newCondition();

//需要同步的方法中
lock.lock()//加锁
lock.unlock()//解锁

//改变线程状态使用condition
cond.await();
cond.signal()





线程的停止方法,stop已经过时

Thread提供的更新的interrupt方法将冻结中的线程强制恢复到执行状态


守护进程即后台进程

使用setDeamon()来设置为守护进程

当后台所有进程为守护进程,则程序会终止


join抢夺CPU执行权

t1.start()
t2.staty()
t1.join()

此时主线程会释放执行权,t1,t2争夺,等到t1执行完,主线程才会恢复并和t2争夺执行权


设置休闲级setPriority

Priority默认为5,最小为1,最大为10

MAX_PRIORITY=10
MIN_PRIORITY=1
NORM_PRIORITY=5















------- 
  android培训java培训、期待与您交流!  ----------

  详细请查看: http://edu.csdn.net/heima/



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值