【Java多线程】创建多线程的方式二---实现Runnable接口(多窗口卖票)
创始人
2024-05-13 18:25:45
0
题:创建三个窗口卖票,总票数为100张

1.继承Thread类的方式:

因为是三个窗口共卖100张所以我们在定义ticket时要用到static来修饰

private static int ticket = 100;

代码如下:

class Window extends Thread{private static int ticket = 100;@Overridepublic void run() {while (true){if (ticket > 0) {System.out.println(getName() + "卖票,票号为:" + ticket);ticket --;}else {break;}}}
}
public class WindowTest {public static void main(String[] args) {Window t1 = new Window();Window t2 = new Window();Window t3 = new Window();t1.setName("窗口1");t2.setName("窗口2");t3.setName("窗口3");t1.start();t2.start();t3.start();}
}

运行结果如下:

我们可以看到窗口1,2,3都卖了票号为100的票,这个时候就要讲到线程的安全问题。我们先忽略 

如果我们不用static修饰改这么写?这个时候引入了创建多线程的方式二---->实现Runnable接口

=========================================================================

创建多线程的方式二---->实现Runnable接口

步骤如下:

1.创建一个实现了Runnable接口的类、

2.实现类去实现Runnable中的抽象方法:run()

3.创建实现类的对象

4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象

5.通过Thread类的对象调用start()

举例说明:遍历100以内的偶数

//1.创建一个实现了Runnable接口的类
class MThread implements Runnable{
//    2.实现类去实现Runnable中的抽象方法:run()@Overridepublic void run() {for (int i = 0; i < 100; i++) {if (i % 2 == 0) {System.out.println(i);}}}
}
public class ThreadTest1 {public static void main(String[] args) {
//        3.创建实现类的对象MThread mThread = new MThread();
//        4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象Thread t1 = new Thread(mThread);
//        5.通过Thread类的对象调用start()t1.start();}
}

在第四步中的运行过程:①启动线程 ②调用当前线程的run()-->调用了Runnable类型的target的run()。

如果我们再启动一个线程,遍历100以内的偶数

//1.创建一个实现了Runnable接口的类
class MThread implements Runnable{
//    2.实现类去实现Runnable中的抽象方法:run()@Overridepublic void run() {for (int i = 0; i < 100; i++) {if (i % 2 == 0) {System.out.println(Thread.currentThread().getName() + ":" + i);}}}
}
public class ThreadTest1 {public static void main(String[] args) {
//        3.创建实现类的对象MThread mThread = new MThread();
//        4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象Thread t1 = new Thread(mThread);
//        5.通过Thread类的对象调用start():①启动线程 ②调用当前线程的run()-->调用了Runnable类型的target的run()t1.start();//再启动一个线程,遍历100以内的偶数Thread t2 = new Thread(mThread);t2.start();}
}

==============================回到问题==================================

使用实现Runnable接口的方式,多窗口卖票

代码如下:

class Window1 implements Runnable{private int ticket = 100;@Overridepublic void run() {while (true){if (ticket > 0){System.out.println(Thread.currentThread().getName() + ":卖票,票号为:" + ticket);ticket--;}else {break;}}}
}
public class WindowTest1{public static void main(String[] args) {Window1 w = new Window1();Thread t1 = new Thread(w);Thread t2 = new Thread(w);Thread t3 = new Thread(w);t1.setName("窗口1");t2.setName("窗口2");t3.setName("窗口3");t1.start();t2.start();t3.start();}
}

运行结果如下:

 忽略线程安全问题。没有static可以使用实现Runnable接口的方式实现多窗口卖票

关于线程安全问题在之后的文章会讲解。

感谢观看!!!

相关内容

热门资讯

吉林市松花江导游词 吉林市松花江导游词3篇  作为一位尽职的导游,时常要开展导游词准备工作,导游词事实上是一种对旅游景点...
北京圆明园的导游词 北京圆明园的导游词  圆明园位于北京市西郊,海淀区东部。原为清代一座大型皇家御苑,占地约5200亩,...
沙澧公园导游词 沙澧公园导游词  大家好!欢迎大家来到美丽的漯河,来到美丽的沙澧公园。我姓张,今天由我来为大家服务!...
蒋氏故居导游词 蒋氏故居导游词  蒋氏故居位于浙江省宁波市奉化区溪口境内,昔日蒋氏家族就于此地生活,工作,娱乐等。下...
安徽九华山的导游词 有关安徽九华山的导游词范文  九华山在皖南青阳县境内,是我国四大佛教名山之一。唐代文学家刘禹锡,登上...
阳龙导游词 阳龙导游词  游客朋友们大家好,今天我们一起来游览具有“天下第一缸”之称的云阳龙缸,我是大家今天行程...
世界地质奇观—阿斯哈图花岗岩... 世界地质奇观—阿斯哈图花岗岩石林的导游词  女士们、先生们:大家好!现在我们已经来到了国家4A级旅游...
洛阳牡丹导游词 洛阳牡丹导游词  作为一名具备丰富知识的导游,总归要编写导游词,导游词是导游员进行实地口语导游的基础...
常州恐龙园导游词 常州恐龙园导游词500字  作为一名专门为游客提供优质服务的导游人员,通常会被要求编写导游词,导游词...
河南天波杨府的导游词 河南天波杨府的导游词  天波杨府是北宋抗辽英雄杨业的府邸,原位于北宋首都东京(今开封)城内西北偶、天...
黄山松导游词 黄山松导游词  导游词是导游人员引导游客观光游览时的讲解词,是导游员同游客交流思想,向游客传播文化知...
龙门石窟导游词 龙门石窟导游词(通用21篇)  作为一名专门引导游客、助人为乐的导游,就不得不需要编写导游词,借助导...
韩国釜山导游词 关于韩国釜山导游词  各位游客,大家好,欢迎大家来到这韩国南部以"深水良港"而著称的釜山参观游览,我...
云南抚仙湖导游词 云南抚仙湖导游词  作为一位出色的导游人员,往往需要进行导游词编写工作,导游词由引言、主体和结语三部...
北京颐和园的旅游导游词 北京颐和园的旅游导游词  篇一:颐和园导游词  1 概况  颐和园是我国现存规模最大,保存最完整的皇...
三亚导游词 三亚导游词精选  三亚市位于海南岛最南端,位于北纬18°09′34″-18°37′27″、东经108...
大理崇圣三塔中英文导游词 大理崇圣三塔中英文导游词  作为一无名无私奉献的导游,通常会被要求编写导游词,导游词作为一种解说的文...
胡雪岩故居的导游词 胡雪岩故居的导游词  作为一名具备丰富知识的导游,常常要写一份好的导游词,导游词具有注重口语化、精简...
西安钟楼的导游词 西安钟楼的导游词  西安钟楼位于西安市中心,明城墙内东西南北四条大街的交汇处。钟鼓楼是古代中国城市的...
南越王墓葬群导游词 南越王墓葬群导游词  西汉南越王墓_导游词  西汉南越王墓  一、概况  各位游客,今天我将带大家参...