多线程

来源:互联网 发布:单片机常用代码 编辑:程序博客网 时间:2024/06/05 23:39

三种线程池的特点及范围:

1-继承Thread类,重写父类run()方法。

2-实现runnable接口。

3-使用Executor Service。


多线程同步机制:

1-在需要同步的方法中加入synchronized关键字。

同步方法,synchronized在方法上;同步代码块,synchronized在代码块上。

2-使用lock锁对象。锁是对象的。JDK5,java.util.concurrent.lock包。

监视器和锁在Java虚拟机一块使用。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。

每一个监视器都和一个对象引用相关联,线程获取锁之前不允许执行同步代码块。

3-流程:

拿到lock锁执行权限(一个对象一把锁

---->无锁---->等待队列(线程阻塞)

---->有锁---->执行同步代码块sychronized---->执行完把锁还给同步对象

4-保证同步代码在同一时刻只有一个线程在执行。


启动线程用start(),可运行状态。

run()方法可以产生必须退出的标识来停止一个线程。


线程的几种可用状态:

Runnable-就绪:线程准备运行,不一定立马开始。

Running-运行中:进程正在执行线程的代码。

Waiting-等待中:线程阻塞。wait():Object类的方法,释放锁对象,notify()线程进入对象锁定池。

Sleeping-睡眠中。sleep():Thread线程类的方法,不释放锁对象,暂停时间到自动恢复。

Blocked on I/O-IO阻塞:等待IO操作完成。

Blocked on Synchronization-同步阻塞:等待获取锁。

Dead-死亡:线程完成执行。


死锁:

1-两个进程都在等待对方执行完毕才能继续往下执行时发生死锁。

2-强制线程按照指定的顺序获取锁,可以确保N个线程可以访问N个资源的同时不发生死锁。

原创粉丝点击