多线程基础知识

一、线程的五种状态

二、线程的4种创建方式

1)继承Thread类

2)实现Runnable接口

3)实现callable接口

4)线程池

 

线程实现方法

调用方法

返回值

异常

是否能取消

继承Thread

Thread t = new Threa();

t.start();

不能

不能

实现Runnable

Thread t=new Thread(New Runnable());

t.start();

不能

不能

实现Callable

FutureTask ft = new FutureTask(New Callable());

Thread t = new Thread(ft);

t.start();

String name = ft.get();(此方法会阻塞主线程)

能(ft.cancel())

线程池

 

 

 

 

总结

    一般使用实现Runnable的方式,原因如下:

  1. 接口可以避免java中的单继承局限性
  2. 代码可以被多个线程共享,代码与线程独立
  3. 线程池只能放入Runable或Callable接口的线程,不能直接放入继承Thread的类
  4. 接口更适合多个相同的程序代码的线程去共享一个资源

 

总结:没有返回值的要求,一般使用实现Runnable接口

三、线程的同步方式

1、同步代码块(synchrozied)

2、同步方法(synchrozied)

3、重入锁(ReenreantLock)

四、线程死锁

多个线程抢占共享资源而造成的僵局。

1、死锁的必备条件

1)资源互斥

2)不可剥夺条件

3)保持与请求

4)循环等待

2、解决死锁的方法

破坏死锁必备条件;但是一般不会破坏互斥条件。

五、线程的通信方式

1、线程通信的背景

CPU默认把时间片随机分配给线程执行,现在我们需要按照自己的顺序执行。

2、线程通信的四种方式

1)等待唤醒方式

a、Object的wait、notify、notifyAll方法(必须配合sychrozide使用)

b、Condition的await、signal、signalAll(必须配合ReenrantLock使用)

2)CountDownLatch(计数器)

一个线程必须等到其他线程执行完了在执行的。

3)CyclicBarrier(基于ReenrantLock与Condition实现的)

多个线程等到同一个状态再一起执行。

4)Semaphore

用于控制对某组线程的访问权限。

六、总结

1、wait与sleep比较

类别同步作用对象释放锁资源唤醒条件方法属性
wait需要作用Object对象本身释放notify实例方法
sleep不需要作用当前线程不释放超时或调用interrupt方法静态方法

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值