(一)线程和进程的关系。
一个线程则是进程中的执行流程,一个进程可以包括多个线程。
(二)实现线程的两种方式。
a、java.lang.Thread:
public class ThreadTest extends Thread
{ }
public void run(){ /***真正实现功能的代码***/}
b、java.lang.Runnable(若需要继承其他类,则需要使用Runnable接口)
public class Thread extends Object implements Runnable
(三)、线程的运行状态。
线程共有新建、运行、阻塞、等待、计时等待、终止六种状态。
1、new操作符创建新线程(新建)
2、start(可运行)
3、线程获得对象的内置锁,而锁被其他线程拥有(阻塞)
4、当线程等待其他线程通知调度表可以运行时(等待)
5、对于一些含有时间参数的方法,sleep( )方法,使线程处于计时等待状态。
6、run( )方法运行完毕或出现异常时,线程处于终止状态。(Tips)
(四)线程的生命周期
如果一个线程在运行状态下发出输入/输出请求,该线程将进入阻塞状态,在其等待输入/输出结束时线程进入就绪状态,对于阻塞 的线程来说,即使系统资源空闲,线程依然不能回到运行状态。
(五)操作线程的方法
1、线程的休眠:sleep()方法需要一个参数用于指定该线程休眠的时间,同时由于该方法执行有可能抛出Interrupted Exception异常,sleep()方法的调用放在try...catch中
2、线程的加入:join()方法,当某个线程使用join方法加入到另一个线程时,另一个线程会等待该线程执行完毕再继续执行。
3、线程的中断:不建议使用stop(),现在提倡run( )方法使用无限循环的形式,然后使用布尔型标记控制循环的停止。
(六)线程安全问题
1、如何解决资源共享问题:基本上所有解决多线程资源冲突问题都会采用给定时间只允许一个线程访问共享资源,这就需要给共享资源上一道锁。
synchronized(Object)
{ }