Java基础 继承的方式创建多线程 / 线程模拟模拟火车站开启三个窗口售票
继承的方式创建多线程 笔记:
/**继承的方式创建多线程
* 线程的创建方法:
* 1.创建一个继承于Thread 的子类
* 2.重写Thread类的run()方法 ,方法内实现此子线程 要完成的功能
* 3.创建一个子类的对象
* 4.调用线程的start() ,启动此线程,调用相应的run()方法
* 易错总结:
* 1.每个Thread只能start()一次!
* 2.多个Thread之间争抢到CPU的时间不总是一致的!
* -------------------------------------------
* 线程的常用方法:
* 1.start() /run()
* 2.Thread currentThread() ;//静态的,返回当前的线程Thread类型
* 3.yield() :静态方法实现线程的让步一次, 类似于sleep()
* 4.join( ) : 假设在A线程中调用B线程的join()方法,表示当执行到此方法时,A线程停止;
* 直至B线程执行完毕,A线程再接着join()之后的代码执行
* 5.getName() /setName()
* 8.isAlive() :判断当前线程是否还存活!
* 9.sleep(long l ): 显式地让子线程睡眠1毫秒!
* 10.线程通信 wait() notify() notifyall()
*
* 设置线程的优先级:setPriority(MaxPriority / MinPriority) /getPriority()
*/
继承的方式创建多线程 代码:
import org.junit.Test;
//1.创建一个继承于Thread 的子类
class SubThread extends Thread{
//2.重写Thread类的run()方法 ,方法内实现此子线程 要完成的功能
public void run(){
for(int i=1;i<=20;i++){
try {
Thread.currentThread().sleep(10);
System.out.println(Thread.currentThread().getName()+"睡眠10ms!");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(currentThread().getName()+" "+i+"\t");
}
}
}
public class TestThread {
//[1] 测试1:两个线程同时输出20个数,每次运行的结果不一致!
public static void main(String[] args) throws InterruptedException {
//3.创建一个子类的对象
Thread st=new SubThread();
//4.调用线程的start() ,启动此线程,调用相应的run()方法
st.setName(" 子线程 ");
st.start();
Thread.currentThread().setName(" 主线程 ");
//作为比较的主线程!
for(int i=21;i<=40;i++){
System.out.println(Thread.currentThread().getName()+" "+i+"**");
// if(i%5==0)
// Thread.currentThread().yield();
st.join();
} } @Test //[2] 测试2:多线程的练习
public void test2(){
(new Thread1()).start();
(new Thread2()).start();
}
class Thread1 extends Thread{
public void run() {
for(int i=1;i<=50;i++){
if(i%2==0)
System.out.println(currentThread().getName()+": "+i);
}
}
}
class Thread2 extends Thread{
public void run() {
for(int i=1;i<=50;i++){
if(i%2!=0)
System.out.println(currentThread().getName()+": "+i);
}
}
}
}
运行结果:
主线程 21**
子线程 睡眠10ms!
子线程 1
子线程 睡眠10ms!
子线程 2
子线程 睡眠10ms!
子线程 3
子线程 睡眠10ms!
子线程 4
子线程 睡眠10ms!
子线程 5
子线程 睡眠10ms!
子线程 6
子线程 睡眠10ms!
子线程 7
子线程 睡眠10ms!
子线程 8
子线程 睡眠10ms!
子线程 9
子线程 睡眠10ms!
子线程 10
子线程 睡眠10ms!
子线程 11
子线程 睡眠10ms!
子线程 12
子线程 睡眠10ms!
子线程 13
子线程 睡眠10ms!
子线程 14
子线程 睡眠10ms!
子线程 15
子线程 睡眠10ms!
子线程 16
子线程 睡眠10ms!
子线程 17
子线程 睡眠10ms!
子线程 18
子线程 睡眠10ms!
子线程 19
子线程 睡眠10ms!
子线程 20
主线程 22**
主线程 23**
主线程 24**
主线程 25**
主线程 26**
主线程 27**
主线程 28**
主线程 29**
主线程 30**
主线程 31**
主线程 32**
主线程 33**
主线程 34**
主线程 35**
主线程 36**
主线程 37**
主线程 38**
主线程 39**
主线程 40**
( 每次的运行结果不一致,这里仅寻去一次!)
线程模拟模拟火车站开启三个窗口售票代码:
package 任务196_多线程; /**模拟火车站开启三个窗口售票,火车站总票数20张!
*
*/
class Window extends Thread{
static int tickets=20;
public void run() {
while(true){
if(tickets>0){
System.out.println(currentThread().getName()+" 为您售票!"+
"剩余票数:"+tickets);
tickets--;
}
else
break; //记得在这里解除死循环!!
}
}
} public class TestWindows {
public static void main(String[] args) {
Window w1=new Window();
Window w2=new Window();
Window w3=new Window(); w1.setName("窗口1");
w2.setName("窗口2");
w3.setName("窗口3");
w1.start();
w2.start();
w3.start();
} }
线程模拟模拟火车站开启三个窗口售票运行结果:
窗口2 为您售票!剩余票数:20
窗口3 为您售票!剩余票数:20
窗口1 为您售票!剩余票数:20
窗口3 为您售票!剩余票数:18
窗口2 为您售票!剩余票数:19
窗口2 为您售票!剩余票数:15
窗口3 为您售票!剩余票数:16
窗口1 为您售票!剩余票数:17
窗口3 为您售票!剩余票数:13
窗口2 为您售票!剩余票数:14
窗口3 为您售票!剩余票数:11
窗口3 为您售票!剩余票数:9
窗口3 为您售票!剩余票数:8
窗口3 为您售票!剩余票数:7
窗口3 为您售票!剩余票数:6
窗口3 为您售票!剩余票数:5
窗口3 为您售票!剩余票数:4
窗口3 为您售票!剩余票数:3
窗口3 为您售票!剩余票数:2
窗口3 为您售票!剩余票数:1
窗口1 为您售票!剩余票数:12
窗口2 为您售票!剩余票数:10
Java基础 继承的方式创建多线程 / 线程模拟模拟火车站开启三个窗口售票的更多相关文章
- 零基础学习java------day18------properties集合,多线程(线程和进程,多线程的实现,线程中的方法,线程的声明周期,线程安全问题,wait/notify.notifyAll,死锁,线程池),
1.Properties集合 1.1 概述: Properties类表示了一个持久的属性集.Properties可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串 一个属性列表可包含另 ...
- Java分享笔记:创建多线程 & 线程同步机制
[1] 创建多线程的两种方式 1.1 通过继承Thread类创建多线程 1.定义Thread类的子类,重写run()方法,在run()方法体中编写子线程要执行的功能. 2.创建子线程的实例对象,相当于 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- Java基础-时间复杂度计算方式
Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...
- 《Java基础——继承》
Java基础--继承 一.类的继承: 规则: 1.一个子类只能有一个父类,但一个父类可以有多个子类,每个子类都可以作为父类使用. 2.若一个类没有声明父类,则默认其父类为Object. 3.父 ...
- Java基础学习总结(88)——线程创建与终止、互斥、通信、本地变量
线程创建与终止 线程创建 Thread类与 Runnable 接口的关系 public interface Runnable { public abstract void run(); ...
- java用Thread方式创建多线程
进程:一个正在执行的程序,每一个进程都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元.线程:进程中一个独立的控制单元.线程控制着进程的执行.一个进程中至少有一个线程. java VM中至少有 ...
- JAVA通过继承Thread来创建线程
创建一个线程的第二种方法是创建一个新的类,该类继承Thread类,然后创建一个该类的实例. 继承类必须重写run()方法,该方法是新线程的入口点.它也必须调用start()方法才能执行. 实例 // ...
- Java基础学习总结(17)——线程
一.线程的基本概念 线程理解:线程是一个程序里面不同的执行路径 每一个分支都叫做一个线程,main()叫做主分支,也叫主线程. 程只是一个静态的概念,机器上的一个.class文件,机器上的一个.exe ...
随机推荐
- Egret入门学习日记 --- 第八篇(书中 2.0~2.6节 内容)
第八篇(书中 2.0~2.6节 内容) 好!开始把前三章的内容录入进来. 但是!由于第一章说的内容都是在介绍白鹭引擎的背景信息,我就不在日记中写了. 直接开始从第二章写起. 2.0节 中提到了IDE( ...
- 白嫖百度 Tesla V100 笔记(在 AI Studio 上使用 tensorflow 和 pytorch 的方法)
登陆百度 AI Studio 并按照教程创建新项目 启动项目并进入控制台 下载 Anaconda3/Miniconda3 安装脚本 安装在 ~/work/*conda3 目录 输入命令 source ...
- 基本 Java Bean
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- Jquery回到顶部插件【query.scrollUp.js】使用
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta na ...
- javascript jssdk退出微信的方法
javascript jssdk退出微信的方法 <pre> $('.tctip').on('click',function () { setTimeout("WeixinJSBr ...
- [转帖]持久化journalctl日志清空命令查看配置参数详解
持久化journalctl日志清空命令查看配置参数详解 最近 linux上面部署服务 习惯使用systemd 进行处理 这样最大的好处能够 使用journalctl 进行查看日志信息. 今天清理了下 ...
- wordpress5.0+中 Notice: Undefined index: HTTP_REFERER 问题解决
都说现在搭网站很简单了,但真遇到问题了还真不一定能解决. 这次搭建的网站是用的wordpress版本5.0.4,以为操作和以前的低版本一样,结果做出来还是遇到问题了. 网站搭好后,首页总在顶端出现一行 ...
- 数据结构——java实现栈
栈 定义: 栈是一种先进后出的数据结构,我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何元素的栈称为空栈 栈的java代码实现: 基于数组: import org.junit.jupite ...
- 剑指offer(5)——从尾到头打印链表
题目: 输入一个链表的头结点,从尾到头反过来打印出每个结点的值.结点定义如下: public class ListNode { int val; ListNode next = null; ListN ...
- SQL 遍历删除所有表的数据
https://www.cnblogs.com/yige/p/5193253.html declare @sqlTabName varchar(100);-- 声明游标DECLARE C_Employ ...