一,多线程概述。
在操作系统中,线程是比进程更小的能够独立运行的基本单位。同时,它也是CPU调度的基本单位。线程本身基本上不拥有系统资源,只是拥有一些在运行时需要用到的系统资源,例如程序计数器,寄存器和栈等。一个进程中的所有线程可以共享进程中的所有资源。
并发的目的是提供系统效率,简化程序设计。多线程是实现并发的一种有效手段。一个进程可以通过运行多个线程来并发地执行多项任务。Java语言的重要特征是在语言级支持多线程的程序设计。
二,多线程的生命周期。
三,创建线程的四种方式
1.继承Thread类。如下图所示。
2.实现Runnable接口。如下图所示。
3.使用Callable和Future创建线程。如下图所示。
4.使用Executor创建线程池。如下图所示。
四,三个售票窗口同时出售10张票的Demo。
程序分析:
(1)票数要使用同一个静态值
(2)为保证不会出现卖出同一个票数,要java多线程同步锁。
设计思路:
(1)创建一个站台类Station,继承Thread,重写run方法,在run方法里面执行售票操作!售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完!
(2)创建主方法调用类
public class Station extends Thread {
//通过构造方法给线程名字赋值
public Station(String name) {
super(name);
}
//为了保持票数的一致,票数要静态
static int tick = 10;
//创建一个静态钥匙
static Object object = "xujie";
//重写run防范,实现买票的操作
@Override
public void run() {
while (true){
synchronized (object){ //这个很重要,必须使用一个锁
//进去的人会把钥匙拿在手上,出来后才把钥匙让出来
if (tick>0){
System.out.println(Thread.currentThread().getName()+" 卖出了第 "+tick+" 张票");
tick--;
}else{
break;
}
}
try {
Thread.sleep(1000);//当前线程休眠1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+" 线程的run()方法执行结束");
}
}
作者:ZZU小哥哥