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

/**继承的方式创建多线程
* 线程的创建方法:
* 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. windows服务器入门 初始化数据盘

    本人在寒假的时候自行搭建了一个服务器,在此分享一下我的方法.本人服务器的系统为Windows 2012R2 在后面的讲解中中文英文都会有    所以不用在意系统的语言问题 1)第一步  自然就是打开服 ...

  2. 在搭建Hadoop集群环境时遇到的一些问题

    最近在学习搭建hadoop集群环境,在搭建的过程中遇到很多问题,在这里做一些记录.1. SSH相关的问题 问题一: ssh: connect to host localhost port 22: Co ...

  3. java枚举的线程安全及序列化

    原文链接:https://www.cnblogs.com/z00377750/p/9177097.html https://www.cnblogs.com/chiclee/p/9097772.html ...

  4. MAVEN(二)

    1.本地仓库?Maven到底有哪些仓库?它们什么关系? Maven仓库: 本地仓库路径配置: 包查找路径:本地——>私服——>中央仓库,然后将查找到的jar同步到私服——>本地仓库 ...

  5. [转帖]Cacls和ICacls

    Cacls和ICacls https://www.cnblogs.com/Aley/p/11089538.html Need Study 解释:  Cacls:显示或修改文件的访问控制列表(ACL) ...

  6. Redis 5.0.5 Install manual

    Redis 5.0.5 安装文档(Install manual) 一.单实例安装 标题 内容 测试环境 Centos 7 虚拟机 vbox redis版本 redis 5.0.5 1.编译安装redi ...

  7. ElasticSearch入门-基本概念介绍以及安装

    Elasticsearch基本概念 Elasticsearch是基于Lucene的全文检索库,本质也是存储数据,很多概念与传统关系型数据库类似. 传统关系型数据库与Elasticsearch进行概念对 ...

  8. springcloud超简单的入门3--负载均衡

    上个文章的末尾说到,当有多个服务实例的时候,怎样来获取服务实例.但是,只是简单的通过get(0)来获取列表中的第一个实例来使用. 现实场景中,还需要写一个算法来实现负载均衡来决定每次使用的服务实例,而 ...

  9. PCA降维笔记

    PCA降维笔记 一个非监督的机器学习算法 主要用于数据的降维 通过降维, 可以发现更便 于人类理解的特征 其他应用:可视化:去噪 PCA(Principal Component Analysis)是一 ...

  10. List 集合 使用 remove 踩得坑

    不要在 foreach 循环里进行元素的 remove/add 操作.remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁.   正确例子: Iterato ...