随手记录--线程

来源:互联网 发布:魔术师约翰逊生涯数据 编辑:程序博客网 时间:2024/06/05 13:29
java.lang.Thread 
线程有六种状态:New(新建)、Runnable(可运行)、Blocked(被阻塞)、Waiting(等待)、Timed waiting(计时等待)、Terminated(被终止)
static vooid sleep(long mills)
休眠给定的毫秒数,sleep方法可能抛出InterruptedException异常


Thread(Runnable target):构造一个新线程,用于调用给定目标的run()方法


voiod start():启动这个线程,将引发调用run方法。这个方法将立即返回,并且新线程将并发执行


void run():调用关联Runnable的run()方法


void interrupt():向线程发送中断请求,线程的中断状态设为true


static boolean interrupted():测试当前线程是否被中断,这是一个静态方法会有副作用——将当前线程的中断状态重置为false


boolean isInterrupted():测试线程是否被终止,不改变线程的中断状态


static Thread currentThread():返回代表当前线程的Thread对象


void joid():等待终止指定的线程


void join():等待指定的线程死亡或经过指定的毫秒数


Thread.State getState():得到这一线程的状态:new Runnable Waiting Timed_Waiting Terminated


void stop():停止该线程,此方法已过时


void suspend():暂停这一线程的执行,已过时


void resume():恢复线程,仅在调用suspend()之后调用,已过时


每一个线程都有一个默认的继承父线程的优先级,MIN_PRIORITY(1)与MAX_PRIORITY(10)之间,NORM_PRIORITY优先级为5


void setPriority():设置线程的优先级,优先级必须在MIN_PRIORITY(1)与MAX_PRIORITY(10)之间,一般使用NORM_PRIORITY优先级为5


static int MIN_PRIORITY:线程的最小优先级为1


static int NORM_PRIORITY:线程的默认优先级5


static int MAX_PRIORITY:线程的最高优先级10


satic void yield():导致当前执行线程处于让步状态,如果有其他的可运行线程具有至少与此线程同样高的优先级,那么这些线程接下来会被调度,ATTENTION!这是一个静态方法


void setDaemon(boolean isDaemon):标识该线程为守护线程或用户线程,这一方法须在线程启动之前调用


synchronized:自动提供一个锁及相关的“条件”


用ReentrantLock类保护代码块,确保任何时刻都只有一线程进入临界区,一旦一个线程封锁了锁对象,其他任何线程都无法通过lock()语句,把解锁操作括在finally子句,不要因为异常的抛出而跳出临界区,如果在结束之前抛出了异常,finally子句将释放锁,但会使对象可能处于一种受损状态


void lock():获取这个锁,如果锁同时被另一个线程拥有则发生阻塞


void unlock():释放这个锁


ReentrantLock():构建一个可以被用来保护临界区的可重入锁


ReentrantLock(boolean fair):创建一个带有公平策略的锁,一个公平锁偏爱等待时间最长的线程,但是这公平的保证将大大降低性能,所以,默认锁没有被强制为公平的


Condition newCondition():返回一个与该锁相关的条件对象


void await():将该线程放到条件的等待集中


void signalAll():接触该条件的等待集中的所有线程的阻塞状态


void signal():从该条件的等待集中随机选取一个线程,解除其阻塞状态


将静态方法声明为synchronized也是合法的,调用该方法获得相关的类对象的内部锁,没有其他线程可以调用同一个类的这个或任何其他的同步静态方法,内部锁和条件存在一些局限:
(1)不能中断一个正在试图获取锁的线程
(2)试图获得锁时不能设定超时
(3)每个锁仅有单一的条件,可能是不够的
(4)最好既不使用Lock/Condition也不使用synchronized关键字,可以考虑使用阻塞队列或者并行流
(5)如果synchronized适合就用,减少编写的代码数量
(6)如果特别需要Lock/Condition结构提供的独有特性才使用


void notifyAll():解除那些在该对象调用wait方法的线程的阻塞状态。该方法只能在同步方法或者同步块内部调用,如果当前线程不是对象锁的持有者,该方法抛出IllegalMonitorStateException异常


void notify():随机选择一个在该对象上调用wait()方法的线程,解除其阻塞状态,该方法只能在一个同步方法或同步块中调用


void wait():导致线程进入等待状态直到它被通知,该方法只能在一个同步方法中调用


void wait(long mills)


void wait(long mills,inr nanos)


阻塞队列


不要调用Thread类和Runnable对象的run()方法,直接调用run()只会执行同一个线程中的任务,而不会启动新线程,应该调用Thread.start()方法,这将创建一个执行run的新线程
被阻塞就无法检查中断状态,中断一个线程不过是引起它的注意,被中断的线程可以决定如何响应中断,如果在中断状态被置位时调用sleep方法,不会休眠,相反,它会消除这一状态并抛出异常
没有可以强制线程终止的方法。然而,interrupt方法可以用来请求终止线程,调用方法,线程的中断状态将被置位,每个线程都有一个boolean标志,调用静态的Thread.currentThread方法获得当前线程,然后调用isInterrupted方法
0 0