介绍
进程是系统分配资源的最小单元,线程是操作系统中进行实际执行操作的。JAVA是默认支持多线程方式的。在JAVA中有两种方式启动线程,Thread类和Runnable接口(There are two ways to create a new thread of execution.这段描述在Thread源码中有)。
为什么会提供两种启动线程的方式,两者的区别是什么?
1.Thread是一个类,Runnable是一个接口
2.Thread类是继承关系,一个类只能继承一个父类,而使用Runnable还可以实现其他接口
3.Thread类实现了Runnable接口,并提供了多种对线程进行操作的方法
4.Thread类提供了线程的完整操作功能,而Runnable更像是专注于执行一个任务
根据源码中注释的描述大致可以理解为,如果你只想单纯的启动一个线程,重写run方法,而不去进行其他的线程操作(挂起、优先级、守护线程等),那么你可以选择使用Runnable接口。
Thread类需要了解的几个方法
public final void join();这个方法可以保证线程的顺序执行
public final void setDaemon(boolean on);设置守护线程(主线程结束后,守护线程会跟着结束),缺省值为false
public void interrupt();把中止标志位置1
public static boolean interrupted();判断线程是否被中止,判断完成之后会清除标志位
public boolean isInterrupted();判断线程是否被中止,判断完成之后不会清除标志位
public synchronized void start();启动线程,重复执行会报IllegalThreadStateException
public static native void yield();这个方法用的比较少,向处理器表示愿意做出让步,把处理时间腾给其他线程,但处理器未必响应
public static native void sleep(long millis);休眠
public final void suspend();挂起
知识点
1.JAVA线程是协作式的
2.JAVA默认是多线程的,最起码有两个,一个main一个gc。
3.finalize方法不一定会被执行,因为finalize是守护线程Finalizer去调用的,当主线程结束,Finalizer就会结束,可能来不及调用finalize方法去释放资源
网友评论