阅读本文大概需要 3分钟。
一、线程
实现线程的3种方式:使用内核线程实现、使用用户线程实现和使用用户线程加轻量级进程混合实现。
关于线程启动:start()运行线程。
关于线程终止:Thread.join()方法结束、Thread.isAlive()检测线程是否终止运行。
关于线程中断:可以调用interrupt()方法,Thread.interrupted()检测是否有中断发生。
关于线程等待:Object.wait()、 Thread.join() 、LockSupport.parkNanos()、LockSupport.parkUntil()。
关于线程运行:notify()和 notifyAll() 通知运行
二、创建线程的2种方式:
1.通过实现 Runnable 接口来创建线程
2.通过继承Thread来创建线程:
3.通过 Callable 和 Future 创建线程
1)创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。
2)创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。
3) 使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
4)调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。
三、线程池
1.使用线程池的好处:
1)重复利用线程,降低销毁。
2)提高响应速度。
3)提高线程的可管理性。
2.线程池可以ThreadPoolExecutor ,Executor实现。
四、线程和进程的区别:
1.进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。(进程是资源分配的最小单位)
2.线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)
1)线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。
2)多进程是指操作系统能同时运行多个任务(程序)。
3)多线程是指在同一程序中有多个顺序流在执行。
总结:
在java中,Thread类自身不执行任何操作,它只是驱动赋予它的任务。