继承的方式创建多线程 笔记:

/**继承的方式创建多线程
* 线程的创建方法:
* 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基础 继承的方式创建多线程 / 线程模拟模拟火车站开启三个窗口售票的更多相关文章

  1. 零基础学习java------day18------properties集合,多线程(线程和进程,多线程的实现,线程中的方法,线程的声明周期,线程安全问题,wait/notify.notifyAll,死锁,线程池),

    1.Properties集合 1.1 概述: Properties类表示了一个持久的属性集.Properties可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串 一个属性列表可包含另 ...

  2. Java分享笔记:创建多线程 & 线程同步机制

    [1] 创建多线程的两种方式 1.1 通过继承Thread类创建多线程 1.定义Thread类的子类,重写run()方法,在run()方法体中编写子线程要执行的功能. 2.创建子线程的实例对象,相当于 ...

  3. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  4. Java基础-时间复杂度计算方式

    Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

  5. 《Java基础——继承》

    Java基础--继承     一.类的继承: 规则: 1.一个子类只能有一个父类,但一个父类可以有多个子类,每个子类都可以作为父类使用. 2.若一个类没有声明父类,则默认其父类为Object. 3.父 ...

  6. Java基础学习总结(88)——线程创建与终止、互斥、通信、本地变量

    线程创建与终止 线程创建 Thread类与 Runnable 接口的关系 public interface Runnable {         public abstract void run(); ...

  7. java用Thread方式创建多线程

    进程:一个正在执行的程序,每一个进程都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元.线程:进程中一个独立的控制单元.线程控制着进程的执行.一个进程中至少有一个线程. java VM中至少有 ...

  8. JAVA通过继承Thread来创建线程

    创建一个线程的第二种方法是创建一个新的类,该类继承Thread类,然后创建一个该类的实例. 继承类必须重写run()方法,该方法是新线程的入口点.它也必须调用start()方法才能执行. 实例 // ...

  9. Java基础学习总结(17)——线程

    一.线程的基本概念 线程理解:线程是一个程序里面不同的执行路径 每一个分支都叫做一个线程,main()叫做主分支,也叫主线程. 程只是一个静态的概念,机器上的一个.class文件,机器上的一个.exe ...

随机推荐

  1. 【ARM-Linux开发】【QT开发】Couldnt load module input, no modules loaded

    export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_PLUGINDIR=/usr/lib/ts  (input.so 所在目录)

  2. 按css查询多个元素

    示例2 查询多个元素 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <!DOC ...

  3. Net中实现HTML生成图片或PDF

    Net中实现HTML生成图片或PDF的几种方式 前段时间由于项目上的需求,要在.Net平台下实现把HTML内容生成图片或PDF文件的功能,特意在网上研究了几种方案,这里记录一下以备日后再次使用.当时想 ...

  4. js修改css属性值

    推荐用dom.style.setProperty('属性','属性值'); 例如: $("#id")[0].style.setProperty('margin-top','1px' ...

  5. Flink SQL项目实录

    一.Flink SQL层级 为Flink最高层的API,易于使用,所以应用更加广泛,eg. ETL.统计分析.实时报表.实时风控等. Flink SQL所处的层级: 二.Flink聚合: 1.Wind ...

  6. php $_SERVER['HTTP_REFERER']详解

    php $_SERVER['HTTP_REFERER']详解 ceshia.php <pre>echo '<a href="ceshib.php">cesh ...

  7. 【坑】mysql 8.0以后的驱动 jar、连接池的变化

    文章目录 前言 com.mysql.cj.jdbc.Driver 后记 前言 博主公司刚配置了新电脑,安装开发环境的时候,美滋滋的将开发工具都装了新版本,结果在使用 mysql 的时候,发现一直链接数 ...

  8. JS 定时器/延时器

    定时器 创建定时器    window.setInterval(方法类型,间隔时间(1000=1秒)) var timer=window.setInterval(func,2000); var i=0 ...

  9. 【win10】 ffmpeg的安装

    安装肯定要先下载,官方下载地址:http://www.ffmpeg.org/download.html 然后会进入这个页面. 然后根据你的操作系统选择 根据自己系统选择,我的系统是64位的所以下载的是 ...

  10. ORA-16401: archivelog rejected by RFS

    ORA-16401: archivelog rejected by RFS 无线出单系统邮件告警10.111.20.1 1.     报错 SYS > ! oerr ora 16041 1604 ...