java多线程

一、概念

二、多线程的创建

1、继承thread,重写run方法(线程体)

2、使用线程:创建线程子类对象,对象调用start(),线程启动。(调用run(),只是普通方法的调用,并不是启动线程;调用start(),交给cup分配时间片去处理,内部会自己调用run())

3、静态代理设计模式:

真实角色(真实类):

代理角色(代理类):持有真实角色的引用(将真实类的引用作为代理类的成员变量)

二者实现相同的接口(两个类实现相同的接口):

4、使用runnable创建线程:(推荐:避免单继承的局限,便于共享资源)

类实现runnable接口+重写run()     --》真实角色

启动多线程,使用静态代理(创建真实角色,创建代理角色+真实角色的引用,调用start()方法启动线程)

5、通过callable接口实现多线程

优点:相对于runnable接口,任务执行后可以返回值,可以抛出异常。

思路:(1)创建callable实现类+重写call方法

           (2)借助执行调度服务ExecutorService,获得Future对象

ExecutorService ser = Executors.newFixedThreadPool(2); //创建两个线程

Future result = ser.submit(实现类对象);

           (3)获得值result.get();

           (4)停止服务ser.shutdownNow();

三、线程的状态:

1、五种状态

(1)新生状态

(2)就绪状态

(3)运行状态

(4)阻塞状态

(5)死亡状态

2、停止线程

(1)自然终止:线程体正常执行完毕

(2)外部干涉:

        1)线程类中定义线程体使用的标识

        2)线程体使用该标识

        3)提供对外的方法改变该标识

        4)外部根据条件调用该方法即可

3、阻塞

(1)join合并线程(写在那个线程里面就阻塞那个线程)

(2)Yield:暂停自己的线程(写在那个线程里面就阻塞那个线程)

(3)Sleep:休眠,不释放锁

         1)与时间相关,倒计时

         2)模拟网络延时

 

四、线程同步

  1. 同步:并发,多个线程访问同一份资源,确保资源安全  --》线程安全
  2. 同步块     synchronized(引用类型|this|类.class){

 

}

     3.同步方法

 

五、死锁

  1. 生产者消费者模式(信号灯法)

使用wait(),notify()/nitifyAll()与synchronized一起使用

六、任务调度

  1. Timer()
  2. schedule(TimerTask task,Date time)
  3. schedule(TimerTask task,Date firstTime,long period)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值