Java基础-多线程(2)

2017-06-21  本文已影响0人  王子也寂寞

一.JDK5以后的针对线程的锁定操作和释放操作.

同步的弊端:

A:效率低

B:容易产生死锁

二.死锁问题的描述

 两个或者两个以上的线程在争夺资源过程中,发生的一种互相等待的现象.

三.生产者和消费者多线程的体现

举例 :

           资源类;

           设置数据(生产者);

            获取数据(消费者);

加锁:

            A:生产者和消费和都要加锁;

            B:必须是同一把锁;

等待唤醒思路:

            A:生产者:

                     先看有没有数据,有就等待,没有就生产,生产完之后通知消费者来消费数据.

             B:消费者:

                       先看有没有数据,有就消费,没有就等待,通知生产者生产.

等待唤醒方法:

           wait();等待.

           notify();唤醒单个线程.

           notifyAll();唤醒所有线程.

           这些方法必须通过锁对象调用.

四.线程组

把多个线程放到一个组里.这样比较方法操作整个组的线程.

代码举例:

代码举例

五.线程池

线程池的好处:线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用.

实现线程池的步骤:

                 A:创建一个线程池对象,控制需要创建几个线程对象.

                                 public static ExxcutorService newFixedThreadPool(int nThreads);

                 B:这种线程池的线程可以执行:

                               Runnable对象或者Callable对象代表的线程

                                做一个类实现Runnable接口.

                C:调用如下方法即可.

                               submit(Runnable task);

代码举例:

代码举例

六.线程常见情况

* A:新建--就绪--运行--死亡

* B:新建--就绪--运行--就绪--运行--死亡

* C:新建--就绪--运行--其他阻塞--就绪--运行--死亡

* D:新建--就绪--运行--同步阻塞--就绪--运行--死亡

* E:新建--就绪--运行--等待阻塞--同步阻塞阻塞--就绪--运行--死亡

上一篇 下一篇

猜你喜欢

热点阅读