Java核心技术——多线程

一、启动线程
1.Runnable接口是线程处理逻辑构件的接口,一个线程按照此接口调用其处理逻辑
2.当Thread对象调用start方法后,首先创建一个新线程,然后在新线程中调用Runnable实现类的run方法执行线程处理逻辑
3.直接调用run方法只会执行同一个线程的任务,不会启动新线程


二、中断线程
1.Thread对象的interrupt方法用来请求终止线程,首先向线程发送中断请求,线程的中断状态设置为true,如果此时该线程被一个sleep阻塞,那么,抛出InterruptedException异常
2.而isInterrupted方法则检测线程的中断状态是否为true,不改变线程的中断状态


三、线程状态
1.线程有6种状态:New、Runnable、Blocked、Waiting、Timed waiting、Terminated
2.线程会因为run方法正常退出而自然死亡,或者因为一个没有捕获的异常终止了run方法而意外死亡
3.join方法会暂停当前线程,等调用join的线程执行完才会继续执行当前线程
4.守护线程的唯一用途是为其他线程提供服务,它应该永远不去访问固有资源,如文件、数据库。当只剩下守护线程时,虚拟机自动退出


四、同步
1.当一个ReentrantLock保护一个代码块后,任何时刻只能由一个线程进入临界区,当其他线程调用lock时会被阻塞,知道第一个线程释放锁对象
2.如果在临界区的代码抛出异常,锁必须被释放,因此,把解锁操作放在finally子句之内是至关重要的
3.锁会造成程序性能的降低,只在可能存在多个线程共享访问冲突的地方使用锁
4.Condition对象是条件对象,它管理那些已经进入被保护的代码段但不能运行的线程
5.条件对象能由Lock.newCondition()创建,它的await方法可以放弃现在拥有的锁并使线程进入阻塞,直到其他线程执行到signalAll或者signal方法后原阻塞线程中的某个将从await调用返回,获得该锁并从阻塞的地方继续执行
6.锁可以拥有多个条件对象
7.可以声明一个方法为synchronized,相当于给整个对象加了一个内部对象锁
8.内部对象锁只有一个相关条件,wait方法添加一个线程到等待集中,notifyAll/notify方法解除等待线程的阻塞状态
9.当一个类的一个静态方法声明为synchronized,则其他线程不能调用该类的这个方法或任何其他的同步静态方法
10.许多情况下可以使用java.util.concurrent包中的各种机制处理所有的加锁,其次使用synchronized关键字,最后使用Lock/Condition
11.tryLock方法试图申请一个锁,在成功获得锁后返回true,否则立即返回false,线程可以立即离开去做其他事情
12.读写锁ReetrantReadWriteLock允许对读者线程共享访问,而写者线程依然是互斥访问,因此对访问者加读锁,对修改者加写锁,其性能优于ReentrantLock


五、阻塞队列
1.使用阻塞队列可以安全地从一个线程想另一个线程传递数据,生产者线程向队列插入数据,消费者线程则取出它们
2.在多线程程序中,队列随时会空或满,因此要使用offer、poll和peek方法作插入删除操作,如果不能完成任务,会返回null而不会抛出异常
3.java.util.concurrent包提供了LinkedBlockingQueue、LinkedBlockingDeque、ArrayBlockingQueue、PriorityBlockingQueue和DelayQueue等阻塞队列


六、同步器
1.如果程序中创建了大量的生命期很短的线程,则应该使用线程池,一个线程池包含许多准备运行的空闲线程。当run方法退出时,线程不会死亡,而是在池中准备为下一个请求提供服务
2.java.util.concurrent包包含了能帮助人们管理相互合作的线程集的类:信号量(Semaphore)、倒计时门栓(CountDownLatch)、障栅(CylicBarrier)、交换器(Exchanger)、同步队列(SynchronousQueue)
3.信号量管理许多的许可证;倒计时门栓让一个线程集等待直到计数变为0;障栅实现了一个集结点;交换器使用在两个线程在同一数据缓冲区的两个实例上工作的时候;同步队列是一种将生产者消费者线程配对的机制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值