简单的JAVA多线程程序
简单的多线程
一、部分基础内容
1、线程的对应包为:
java.lang.Thread; //Thread的T需要区分大小写
//直接使用eclipse可以不需要进行import
//直接使用终端进行运行则必须import
2、线程的运行方式
线程对象调用start()函数,多个对象同时进行调用开始运行
station1.start();//让每一个站台对象各自开始工作
station2.start();
station3.start();
3、重写线程的原调用函数run()
run()函数为线程运行时使用的函数
public void run(){
//运行的代码段
}
注意在run()函数中设置线程结束条件
4、对线程进行“催眠”,使得其它线程可以运行
sleep(1000); //1000的单位是毫秒
5、设置密钥,加锁
//创建一个静态钥匙,值可以是任意的
static Object key = “ “;
//对最先进入运行的线程进行加锁,其它线程进入等待状态
//所以该锁应该出现在循环运行中
synchronized(key)
为什么需要进行加锁:
对于多线程来说,CPU的资源是各个线程都可以使用的,如果不对其进行加锁,任意
线程都可以随时对其资源(变量等)进行修改,不能够保证线程内执行代码的原子操
作,导致程序出现混乱。(eg:原1+1=2,最后得到非2的数。)
二、完整代码如下:
/**
* 多线程购票
* @author cyq_cookies
* @date 2020-06-03
*/
class Station1 extends Thread{ //通过构造方法给线程名字赋值
public Station1(String name){
super(name);//给线程名字赋值
}
//static int tick = 20; //因为票数要保持一致,所以票数要静态
static Object key = "cyq";//创建一个静态钥匙,值是任意的
public void run(){ //重写run方法
while(tick>0){
synchronized(key){
if(tick>0){
System.out.println(getName()+":售卖第"+(21-tick)+"张票!");
tick--;
}
else{
System.out.println("票已全部售卖完!");
}
}
try{
sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
if(tick==0)
System.out.println(getName()+"查询:无票可买!");
}//while
}
}
public class saleTicket {
public static void main(String[] args) {
//实例化站台对象 并为每一个站台取名字
Station1 station1 = new Station1("窗口1");
Station1 station2 = new Station1("窗口2");
Station1 station3 = new Station1("窗口3");
station1.start();//让每一个站台对象各自开始工作
station2.start();
station3.start();
}
}
三、运行结果
两次运行,仅第一次进行买票,1、2、3窗口分别按次序进行,其它为随机顺序进入。
还没有评论,来说两句吧...