JAVA三种线程锁

内置锁:synchriozed,关键字,同步代码块,object.wait和object.notify/notifyall
显示锁:Lock,JUC包下的类,同步代码块,condition.await和condition.signal/signalall
原子类:Atomic,JUC包下的类,原理CAS,注意ABA问题

Lock接口方法有lock、unlock、trylock、newCondition
try {
    lock.lock();
    System.out.println( lock.tryLock());
    System.out.println( lock.tryLock(1000, TimeUnit.MILLISECONDS));
} catch (InterruptedException e) {
    e.printStackTrace();
} finally {
    lock.unlock();
}

Condition.await与Object.wait区别

1、Condition.await持有的是Lock锁,Object.wait持有的是synchronized锁,都是阻塞当前线程
2、唤醒lock锁用的是Condition.signal和signalAll,唤醒synchronized锁用的是Object.notify和notifyAll
3、Condition.await、Condition.signalAll需要与Lock配合使用,Object.wait、Object.notifyAll需要与synchronized配合使用,不能单独使用

synchronized与lock区别

1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类;
2.synchronized在线程执行结束或抛出异常后自动释放锁,Lock必须在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
3.lock功能比synchronized功能强大,可以尝试获取锁,还有一些实现类,像读写锁等
4.synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可中断、可公平(两者皆可)
指定公平锁Lock lock = new ReentrantLock(true)
5.Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。

Callable与Runnable的区别

相同点:都是在线程中被执行;

不同点:Callable在线程中执行的接口是call,能对外抛出异常,且有返回值;Runnable在线程中执行的接口是run,不能对外抛出异常,且没有返回值

 

Future线程

Future线程:可以获取线程的执行结果,判断线程是否执行结束、中断执行中的线程
FutureTask是Runable和Future接口的实现类

线程一般要求快进快出

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值