【Java重新学习】多线程-2

来源:互联网 发布:java入门教程下载 编辑:程序博客网 时间:2024/05/22 14:58
锁是控制多个线程对资源进行访问的工具。

aschronized同步代码块对于锁的操作是隐式的。

(JDK5将同步和锁封装成了对象,并将操作锁的隐式方式定义到了该对象中。将隐式操作变成显式操作。)
Lock实现提供了比使用aschronized方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关condition对象。

condition将Object监视器方法分解成截然不同的对象,以便将这些对象与任意Lock组合使用,为每个对象提供多个等待set(wait---set)。

Lock接口:lock()获取锁,unlock()释放锁,通常需定义在finally代码块中。
import java.util.concurrent.locks.*;
Lock lock=new ReentrantLock();

Condition接口:
Signal();
await();
awaitAll();

wait和sleep的区别:
1.wait可以指定时间也可以不指定。sleep必须指定时间。
2.在同步中,对cpu的执行权和锁的处理不同。wait释放执行权,释放锁。sleep释放执行权,不释放锁。

停止线程:
1、stop方法,已经过时。
2、run方法结束。(定义标记)但是如果线程处于冻结状态,就无法读取标记。
3、interrupt()中断线程。向线程发送中断请求,线程的中断状态将被设置为true。如果目前该线程被一个sleep调用阻塞,那么抛出InterruptException
要想弄清中断状态是否被置位,首先调用静态的Thread.CurrentThread方法获得当前线程,然后调用isInterrupted方法。
while(!Thread.currentThread().isInterrupted() && more work to do)
{
    do more work
}
static Boolean interrupted()测试当前线程是否被中断。这是一个静态方法---将线程的中断状态置为false

setDaemon()方法
将线程标记为守护线程或用户线程。---后台线程(前台线程需手动结束,而后台线程,如果所有前台线程结束,后台线程无论出于什么状态,都自动结束。)
该方法必须在启动线程前调用。

Join方法 等待终止指定的线程

toString()方法 返回线程名,优先级

线程属性:
优先级 setPriority方法提高或降低线程的优先级。
void setPriority(int newPriority)
static void yield()导致当前线程处于让步状态。
0 0
原创粉丝点击