什么是线程
线程就是一个主机执行的应用程序任务,一般来说,一个运行中的程序至少有一个线程,这个线程负责执行程序体,Java中,这个线程称之为main线程,通过调用main()方法来执行。实际上,在一个Java程序中至少有一个以上的线程,不过很多时候我们并未意识到,比如一个普通的GUI程序,一般有一个负责展现界面的线程,一个或者多个负责监听界面事件的线程,还有一个负责在后台处理相应逻辑的线程。
使用的场景
- Non-blocking I/O,非阻塞I/O
- I/O复用,通过事件监听的机制,当某个资源可用的时候,通知相应的线程执行操作,其他时候,线程处于休眠状态。
- Polling,按照一定的频率轮询相应的资源,当资源为可用的时候执行,否则sleep一段时间后重复此过程。
- Signals,在资源上加上标识,当资源可用时,发出一个异步的信号,这个信号将将打断当前程序的运行而调用相应的线程,当线程执行完毕后,重新回到先前被打断的程序,执行剩下的操作。Java现在不支持这种操作。
- Alarm and Timers
- Independent task
- Parallelizable Algorithm
创建一个线程
可以通过继承Thread类或者是实现Runnable接口创建一个线程。
线程的生命周期:
- Creating ,这里只是单存的通过 new 关键字创建一个线程的实例,其他的类可以访问到当前线程的公开的属性值或者是方法,但是现在线程还处于非运行状态
- Running,通过调用相应的Start()方法,让当前的线程run起来,这个时候可以调用isAlive()测试线程是否run起来了
- Terminating,线程被终止,线程实例被销毁。