多线程
——Java开发 @author Bliss
线程模型**
什么是线程?
-安装在磁盘上的一段指令的集合。即我们电脑或手机上的那些快捷方式。
什么是进程?
-是运行中的程序。
什么是线程?
-被称为轻量级进程,是程序执行流中的最小单位。是程序中的一个单一的顺序控制流程。
什么是多线程?
-就是在单个程序中可以同时运行多个不同的线程执行不同的任务。
多线程的特点
-同一个进程中的多个线程之间可以并发执行。
多线程的目的
-最大限度地利用CPU资源
两种创建线程的方法 [后有详细代码]
-通过继承Thread类
-通过实现Runnable接口
都是通过thread的start方法启动线程
线程的生命周期
-创建(new Thread)
- Thread thread = new Thread();
使用new创建一个线程后,该线程仅仅是一个空对象,但系统没有为其分配资源,处于创建状态。
-就绪(Runnable)
- 使用start()方法启动一个线程后,系统为该线程分配了除了CPU外的所需资源,处于就绪状态。
-阻塞(Blocked)
- 一个正在运行的程序因某种原因不能继续运行,就会处于阻塞状态。
原因可能是:
-使用了sleep()方法,该线程对象会被置入一个阻塞集,等待超时自动苏醒
-当多个线程试图进入同步区域(synchronized)时,没能进入同步区域的线程就会被置于一个锁定集,直到获得进入同步区域的锁,进入就绪状态。
-使用了wait()方法,线程会被置入一个等待集,直到执行了该对象的notify()方法。
-运行(Running)
- 处于就绪状态的线程获得CPU资源,转为运行状态。
-死亡(Dead)
- 线程在run()方法执行结束后进入死亡状态。
终止线程的3种方法:
1.线程正常退出
2.使用stop()方法强行终止线程[不建议使用]
3.使用interrupt()方法中断线程[不建议使用]
一个售票的小案例讲解 Thread 和 Runnable 的使用
public class Demo {
/***
* 售票
*
* Runnable 的演示
*
* @param args
* @author Bliss
*/
public static void main(String[] args) {
//Runnable
TicketRunnable ticketRunnable = new TicketRunnable();
Thread t1 = new Thread(ticketRunnable,"窗口1");
Thread t2 = new Thread(ticketRunnable,"窗口2");
t1.start();
t2.start();
}
}
class TicketRunnable implements Runnable {
/***
* Runnable
* 优点:
* 1.避免单继承的局限性
* 2.适合资源的共享
*/
private int ticket = 5;
@Override
public void run() {
while (true) {
System.out.println(Thread.currentThread().getName() + ":" + (ticket--));
if (ticket < 0) {
break;
}
}
}
}
public class Demo {
/***
* 售票
*
* Thread 的演示
*
* @param args
* @author Bliss
*/
public static void main(String[] args) {
//Thread
TicketThread t1 = new TicketThread("窗口1");
TicketThread t2 = new TicketThread("窗口2");
t1.start();
t2.start();
}
}
class TicketThread extends Thread{
private int ticket = 5;
public TicketThread(String name){
super(name);
}
@Override
public void run() {
while (true) {
System.out.println(this.getName() + ":" + (ticket--));
if (ticket < 0) {
break;
}
}
}
}