多线程相关总结的知识

多线程
1.创建线程的三种方法
a) 继承Thread类,重写run()方法,run()就是线程的执行体;
b) 实现Runnable接口,重写接口里的run()方法,run()方法是线程的执行体,然后以Runnable接口实现类的实例作为Target来创建Thread类的实例,该实例才是真正的线程对象;
c) 创建Callable接口的实现类,实现接口里面的call()方法,该方法就是线程的执行体,然后用FutureTask类包装Callable对象,这个对象封装了call()方法的返回值,最后以FutureTask对象为Target对象创建Thread实例。
2.三种创建方法的对比
a) 后两种方法是实现接口,由于Java单继承的特点,采用这两种方法还可以实现其他类。
b) 第三种方法有返回值,通过FutureTask对象的get()方法获取,也可以声明抛出异常,而前两种方法均没有返回值,也不能抛出异常。
c) 前两种方式,多个线程可以同时共享一个Target对象,非常适合多个线程同时处理一份资源的情况,从而可以将CPU、代码和数据分开,较好的体现了面向对象的思想。
3.线程的生命周期
新建状态(New):当线程对象被创建之后,即进去了新建状态;
就绪状态(Runnable):当调用线程对象的start()方法,线程即进去就绪状态;
运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才真正的执行;
阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进去阻塞状态。
死亡状态(Dead):线程执行完或者异常退出run()方法,该线程结束生命周期。
阻塞状态引起的原因分为三种:
a) 等待阻塞:运行状态中的线程执行wait()方法,使得该线程进去到等待阻塞状态;
b) 同步阻塞:线程在获取synchronized同步锁失败(锁被其它线程占用),线程会进去同步阻塞状态;
c) 其它阻塞:通过调用线程的sleep()或join()或发出I/O请求时,线程会进去阻塞状态,当sleep状态超时、join等待线程终止或超时、I/O处理完毕,线程将重新进去就绪状态。
4.线程同步控制
a) 同步代码块(Synchronized)
b) 同步方法
c) 同步锁(Lock)
可重入锁(ReentrantLock):它的可重入性体现在一个线程可以对已被加锁的ReentrantLock锁再次加锁,所以一段被锁保护的代码可以调用另一个被相同锁保护的方法。
5.线程通信
a) 传统线程通信(wait(),notify(),notifyAll()这三个方法属于Object类,必须由同步监视器调用)
i.Synchronized修饰的同步方法,this即是同步监视器,所以可以在同步方法中直接调用这三个方法。
ii.Synchronized修饰的同步代码块,同步监视器是Synchronized后括号里的对象(一般是被并发访问的共享资源),所以要使用该对象调用这三个方法。
iii.wait()方法:导致当前线程等待,直到其他线程调用该同步监视器的notify()、notifyAll()方法来唤醒该线程,调用wait()方法的当前线程会释放对该同步监视器的锁定。
iv.notify()和notifyAll()方法:唤醒在此同步监视器上等待的方法,只有当前线程放弃对该同步监视器的锁定,才可以执行被唤醒的线程。
b) 使用Condition控制线程通信:使用Lock对象来保证同步时,该对象相当于同步监视器,Condition实例被绑定在一个Lock对象上,一般使用lock.newCondition();的形式获得Condition对象来控制由该Lock对象保证同步的多个线程之间的通信,Condition对象也有三种方法来控制线程通信:
i.await():作用类似同步监视器的wait()方法;
ii.signal()、signalAll()方法:作用类似同步监视器的notify()、notifyAll()方法。
c) 使用阻塞队列控制线程通信:BlockingQueue接口是Queue的子接口,但它不是作为容器,而是作为线程同步的工具;BlockingQueue具有一个特征:当生产者线程试图向BlockingQueue放入元素时,如果该队列已满,则线程阻塞;当消费者线程试图从BlockingQueue取出元素,如果该队列已空则线程阻塞。
6.线程组(ThreadGroup):Java程序允许程序直接对线程组进行控制,相当于同时控制这些线程,用户创建的所有线程都属于指定的线程组,如果没有显示的指定,则属于默认的线程组,默认的情况下,子线程和创建它的父线程处于同一线程组内。

猜你喜欢

转载自blog.csdn.net/weixin_44168355/article/details/88211041