java线程

Java线程

线程:一个程序执行多个任务,一个任务就是所谓的线程,可以运行一个以上的线程程序称之为多线程程序

线程和进程比较:线程开销小。可共享数据。进程开销大,各个进程之间是相互独立。

Thread:

sleep() 不会产生新的线程,使用的是当前线程,会抛出InterruptedException的异常。

Strat(),run().记住不要调用run方法,不然程序不会启动新线程,会将run作为程序的对象来运行。

Stopsuspend已被弃用 容易出现死锁。

 

Interrupt Void:向线程发送终端请求。中断状态为true,如果该线程被sleep占用,则会抛出InterrputedException异常。

Interrupted Boolean:静态方法,检测线程是否中断。将终端状态会改变成false;

isInterrupted 线程方法。检测线程是否检测,不会清除中断线程。

如果在每次迭代的时候调用sleep或者其他的中断方法的时候,线程不会每次都去检测是否中断。相反会抛出InterruptedException异常。

 

currentThread Thread:会返回当前执行的Thread对象。

 

线程六种状态:

1.       new(创建):new关键字

2.       runnable(就绪):调用start(),就绪的线程可能在运行,也可能没有运行。当线程数目大于处理器数目的时候,那么会使用时间调度器来处理

3.       waiting(等待):例如:wait()

4.       timed waiting(计时等待):例如:sleeplong time:阻塞和等待线程是最不消耗资源的

5.       blocked(被阻塞):

1)当一个线程试图获取一个内部锁,而内部锁被其他线程锁持有,那么线程是进入阻塞状态,当其他线程释放该锁,其他线程允许本线程持有的时候,那么该线程编程非阻塞状态。

2)被阻塞状态和等待状态是有很大的不同。

3)计时等待:Thread.sleep,Object.wait,Thread.join,

 

6.       terminated(被终止):正常:执行完run方法正常退出

                    意外:没有捕获异常终止了run方法

                    特殊:stop杀死线程(不推荐使用)

 

Join void:等待终止制定线程。(long millis)等待指定的时间终止线程

GetState:获取状态,就是以上六种状态

Resume修复线程:通suspend相对应,已过时。

 

线程属性:

优先级:调度器选择线程时,会选择优先级高的。但是线程的优先级是高度依赖于系统的。所以不要指望在这里设置优先级能够很好的得到自己想要的结果。虚拟机的线程优先级是依赖于宿主系统,比如windows只有7个线程优先级。如果高优先级的没有进入活动状态,那么低优先级的线程永远不可能执行。每次调度器选择线程的时候会优先从优先级高的线程中取。

优先级最低为1,最高为10,默认为5

Yield static ,将控制权让给和他同等级或者更高级别优先级的线程

守护线程:setDeamon(true),当所有非守护线程退出后,守护线程也就自动退出了,温馨提示:不要用守护线程操作文件,或者共享资源,避免守护线程意外终止。设置守护线程必须在线程调用start()之前。

线程组:默认的线程都会添加到group中。或者创建group,然后将线程加入进去。

异常处理器:threadGroup实现了UncaughtExceptionHandler

你可能感兴趣的:(java,多线程,thread,编程,虚拟机)