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

/**继承的方式创建多线程
* 线程的创建方法:
* 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. 【C/C++开发】C++实现简单的线程类

    C++封装一个简单的线程类 多线程编程简介: 大家在编程时,经常需要在程序中启动一个或多个线程来处理任务,而如果每次都是去调用系统创建线程的API函数来创建,代码量虽不多,但线程的创建和业务逻辑代码就 ...

  2. 【C/C++】【VS开发】结构体存储空间数据对齐说明

    关于内存对齐 一: 1.什么是内存对齐 假设我们同时声明两个变量: char a; short b; 用&(取地址符号)观察变量a, b的地址的话,我们会发现(以16位CPU为例): 如果a的 ...

  3. XMemcached的基本使用

    XMemcached是memcached的一个java客户端,基于java nio,支持memcached的所有协议.本文简要介绍XMemcached的基本使用. 一.添加依赖 <depende ...

  4. lamp和xampp和lampp的区别

    lamp:我们最常说的lamp,是一种系统环境,由Linux+Apache+Mysql+PHP构成,常用来运行web服务器.要在系统上完成这个环境的安装,可以很复杂的一步一步编译和设置,也可以用已经集 ...

  5. aPlugForUNIX(POJ-1087)【最大流】

    题目链接:https://vjudge.net/problem/POJ-1087 题意:有N个插座,M个电器,K种转换头(每种转换头有无限多个),求最多能同时给多少台设备供电 思路: 首先,建立源点和 ...

  6. python学习-47 random模块

    random模块 随机模块 random 的方法: print(random.random()) # [0,1] 的浮点数 print(random.randint(1,3)) print(rando ...

  7. 机器学习-svd实现人脸识别

    加载sklearn中的人脸数据集 from sklearn.datasets import fetch_lfw_people faces = fetch_lfw_people() 执行上面的第二行程序 ...

  8. mongo与spring集合

    1.加入lib包,在Maven中 <dependency> <groupId>org.springframework.data</groupId> <arti ...

  9. substr函数索引创建测试

    技术群里小伙伴,沟通说一条经常查询的SQL缓慢,单表SQL一个列作为条件,列是int数值类型,索引类型默认创建. 一.SQL文本substr函数索引创建测试 ,) nm1 ')需求,将上述SQL执行速 ...

  10. (八)装配Bean(2)

    二.在Java类中进行显式的装配 显式配置有两种: 1. 一种是在java(本文讲解)   2. 另一种是xml配置文件(第一章有讲) 案例一: 使用java显式装配+@autowired自动装配的方 ...