Java多线程-14

目录

程序线程进程

并发并行​编辑

创建线程的基本方式


程序线程进程


并发并行

创建线程的基本方式(1)

package com.edu.threaduse;public class Demo01 {public static void main(String[] args) throws InterruptedException {//创建Cat对象,可以当线程使用Cat cat = new Cat();cat.start();//启动线程//使用run的话是主线程里面的一个普通方法,只有run执行完毕才结束//说明:当main线程启动一个子线程Thread-0,主线程不会阻塞,会继续执行for (int i =0;i<10;i++){System.out.println("主线程i="+i);Thread.sleep(1000);}}
}
//通过继承Thread类创建线程
/*
当一个类继承类Thread类,该类就可以当做线程使用
我们会重写run方法,写上自己的业务代码
run Thread类实现Runnable接口的run方法*/
class Cat extends Thread{@Overridepublic void run() {int time =0;while(time++<80){//重写run方法,写上自己的业务逻辑//该线程每隔1秒,在控制台输出"喵喵,我是小猫咪";System.out.println("喵喵,我是小猫咪"+"线程名称="+Thread.currentThread().getName());//让线程休眠1stry {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

创建线程的基本方式(2) 

package com.edu.threaduse;public class Demo02 {public static void main(String[] args) {
//        Dog dog = new Dog();
//        //dog.start()无法使用
//        Thread thread = new Thread(dog);
//        thread.start();Tiger tiger = new Tiger();ThreadProxy threadProxy = new ThreadProxy(tiger);threadProxy.start();}
}
class Animal{}
class Tiger extends Animal implements Runnable{@Overridepublic void run() {System.out.println("老虎");}
}
class ThreadProxy implements Runnable{ //看成一个Thread代理类private  Runnable target = null;//属性@Overridepublic void run() {if(target!=null){target.run(); //运行类型为Tiger}}public ThreadProxy(Runnable target) {this.target = target;}public void start(){start0();}public void start0(){run();}
}class Dog implements Runnable{ //通过实现Runnable接口实现线程@Overridepublic void run() {while(true){System.out.println("小狗叫");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

售票超卖

package com.edu.ticket;public class SellTicket {public static void main(String[] args) {SellTick02 sellTick02 = new SellTick02();new Thread(sellTick02).start();new Thread(sellTick02).start();new Thread(sellTick02).start();}
}//class SellTick01 extends Thread{
//    private static int ticketNum = 100;
//
//    @Override
//    public void run() {
//
//       while (true){
//           if (ticketNum<=0){
//               System.out.println("售票结束");
//               break;
//           }
//           System.out.println("售出一张,还有:"+--ticketNum+"张");
//           try {
//               Thread.sleep(1000);
//           } catch (InterruptedException e) {
//               throw new RuntimeException(e);
//           }
//       }
//    }
//}
class SellTick02 implements Runnable{private  int ticketNum = 100;@Overridepublic void run() {while (true){if (ticketNum<=0){System.out.println("售票结束");break;}System.out.println("售出一张,还有:"+--ticketNum+"张");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

线程终止

package com.edu.exit;public class ThreadExit_ {public static void main(String[] args) throws InterruptedException {T t1 = new T();t1.start();//主线程休眠10s再通知Thread.sleep(10*1000);t1.setLoop(false);}
}
class T extends Thread{private  boolean loop = true;@Overridepublic void run() {while(loop){try {Thread.sleep(50);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("AThread 运行中...");}}//方便主线程控制public void setLoop(boolean loop) {this.loop = loop;}
}

 常用方法

package com.edu.method;public class ThreadMethod_ {public static void main(String[] args) throws InterruptedException {T t = new T();t.setName("老虎");t.setPriority(Thread.MIN_PRIORITY);System.out.println(t.getName());t.start();//主线程打印hi,然后中断子线程for (int i =0;i<5;i++){Thread.sleep(1000);System.out.println("HI");}t.interrupt(); //中断t的休眠}
}
class T extends Thread{@Overridepublic void run() {while (true){for (int i =0;i<100;i++){System.out.println(Thread.currentThread().getName()+"吃包子");}try {System.out.println(Thread.currentThread().getName()+"休眠中");Thread.sleep(20000);} catch (InterruptedException e) {//当线程执行道一个中断方法时,可以加入自己的业务代码System.out.println(Thread.currentThread().getName()+"被中断了");}}}}

package com.edu.method;public class ThreadMethod02 {public static void main(String[] args) throws InterruptedException {T1 t1 = new T1();t1.start();for (int i = 0;i<20;i++){if(i==5){Thread.yield();//t1.join}System.out.println("HI"+i);Thread.sleep(1000);}}
}
class T1 extends Thread{private int loop = 20;@Overridepublic void run() {while (loop-->0){System.out.println("Hello: "+loop);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

package com.edu.method;public class ThreadMethod03 {public static void main(String[] args) throws InterruptedException {T3 t = new T3();Thread t1 = new Thread(t);for (int i = 1 ;i<=10;i++) {System.out.println("hi:"+i);if (i==5){t1.start();t1.join();}Thread.sleep(1000);}System.out.println("主进程结束");}
}
class T3 implements Runnable{@Overridepublic void run() {for (int i=1;i<=10;i++){System.out.println("HELLO:"+i);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}System.out.println("子线程结束");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DolphinScheduler实际应用

前言 最近公司新启动了一个项目&#xff0c;然后领导想用一下新技术&#xff0c;并且为公司提供多个大数据调度解决方案&#xff0c;我呢就根据领导要求调研了下当前的开源调度工具&#xff0c;最终决定采用DolphinScheduler&#xff0c; 因此研究了一下DolphinScheduler &…

今日聊聊寒假假期如何不颓废

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

Linux-进程间通信_管道

项目场景&#xff1a; 须熟知文件管理和进程方面的基础知识 通过Xshell和VScode 相互进行远程开发&#xff0c;学习进程间通信的其中一种方式——管道。 问题描述 依照我们曾经所学的知识&#xff0c;我们仅仅只能在单个进程中进行数据的交互&#xff0c;但是在实际应用中&a…

算法第七天-粉刷房子Ⅲ

粉刷房子Ⅲ 题目要求 解题思路 来自[宫水三叶] 动态规划 定义 f[i][j][k] 为开了前i间房子&#xff0c;且第 i 间房子的颜色编号为 j&#xff0c; 前 i 间房子形成的分区数量为 k 的所有方案中的[最小上色成本]。 我们不失一般性的考虑 f[i][j][k] 该如何转移&#xff0c;由…

Sentinel使用

前言&#xff1a; 所有的准备工作都做好了&#xff0c;就可以进入到Sentinel的具体使用上了&#xff0c;这里还需要一个测试工具叫做jmeter&#xff0c;是一个很好的测试工具&#xff0c;专门针对并发的&#xff0c;准备好以后&#xff0c;就可以直接开干了。 一、Sentinel作用…

闲人闲谈PS之五十一——项目物料移动中的2个WBS

惯例闲话&#xff1a;2024年在不知不自觉中已经到来&#xff0c;之前闲人也聊起过2023年是忙碌和收获的一年。今年的任务初步排一下&#xff0c;也基本上排到年底去了&#xff0c;又会是忙碌的一年。虽然忙碌&#xff0c;但是今年对于自己而言&#xff0c;有更加重要的事情要去…

vue3顶部内容固定定位,下面内容可以向上滚动

功能要求&#xff1a;一个div里有两个模块儿&#xff0c;顶部按钮模块儿和下面的内容区域模块儿&#xff0c;顶部按钮模块儿固定在顶部不随滚动条滚动&#xff0c;下面内容区域可以滚动 如图&#xff1a; 思路是&#xff1a; 1、顶部按钮固定定位&#xff0c;会脱离文档流&…

两阶段提交协议三阶段提交协议

两阶段提交协议 分布式事务是指会涉及到操作多个数据库的事务,在分布式系统中&#xff0c;各个节点之间在物理上相互独立&#xff0c;通过网络进行沟通和协调。 XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范&#xff08;即接口函数&#xff09;&#xff0c;交易…

sublime text 打开 txt 文档乱码问题

对于 windows 系统使用系统自带的 txt 编辑工具&#xff0c;默认打开和保存文件的文件的格式是 GBK 或者 GB2312&#xff0c;而 sublime 默认仅支持 utf-8&#xff0c;所以当从 windows 系统拷贝文件在 mac 上浏览有时候会出现乱码的问题&#xff0c;这时候就需要安装插件使 su…

python统计分析——直方图(plt.hist)

使用matplotlib.pyplot.hist()函数绘制直方图 from matplotlib.pyplot as pltdata_setnp.array([2,3,3,4,4,4,4,5,5,6]) plt.hist(fish_data) 下面介绍plt.hist()函数中常用的几个重要参数&#xff08;参数等号后为默认设置&#xff09;&#xff1a; &#xff08;1&#xff0…

Linux基础——进程初识(二)

1. 对当前目录创建文件的理解 我们知道在创建一个文件时&#xff0c;它会被默认创建到当前目录下&#xff0c;那么它是如何知道当前目录的呢&#xff1f; 对于下面这样一段代码 #include <stdio.h> #include <unistd.h>int main() {fopen("tmp.txt", …

Web 自动化测试过程中会遇到哪些问题?

作者&#xff1a;木可 链接&#xff1a;https://www.zhihu.com/question/636965892/answer/3341410674 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 Web自动化是指使用测试脚本来自动执行网页上的任务。这包括填…

螺丝厂家:家具螺丝的类型和规格

作为家具厂采购经理&#xff0c;您是否经常对如何选择合适的家具螺钉困惑不已&#xff1f;您想了解不同种类和型号家具螺钉特征和适用场景吗&#xff1f;你想找专业指南来帮助你提升产品质量和稳定性吗&#xff1f;假如你有这些困惑&#xff0c;那么就来对地方了&#xff01; 在…

Python遍历读取 A 文件夹中的 A1、A2、A3、A4、A5 中的各子文件夹中的图片,并对每张图片处理后保存到指定路径

目录 一、具体步骤二、文件夹目录结构样例三、代码四、实例遍历处理后结果五、总结 一、具体步骤 首先&#xff0c;指定 A 文件夹的路径和重命名后的文件夹路径。 然后&#xff0c;遍历 A 文件夹中的各子文件夹。 在每个子文件夹中&#xff0c;遍历所有文件。 读取每个文件&am…

使用 Swagger 导入 Postman: 最佳实践与步骤解析

Swagger和 Postman 都是常用的 API 测试工具&#xff0c;都有各自的优势。为了结合两者的优点&#xff0c;我们可以考虑将 Swagger 中的 API 定义导入到 Postman 中去&#xff0c;这样就可以利用 Postman 更强大的测试功能来测试 Swagger 定义的接口。 下面将以 Swagger Petst…

知虾会员**成为知虾会员,尊享专属权益**

在当今繁忙的生活中&#xff0c;线上购物已经成为现代人们的主要消费方式之一。而作为线上购物平台的领军者之一&#xff0c;Shopee为了提供更加个性化和便利的购物体验&#xff0c;推出了知虾会员&#xff08;Shopee会员&#xff09;服务。知虾会员不仅可以享受到一系列会员专…

LeetCoed刷题:21. 合并两个有序链表

题目&#xff1a; 是否独立解出&#xff1a;否 解题时的思路与想法&#xff1a;解题时有几个问题&#xff1a; 1.怎么遍历两个数组&#xff0c;嵌套两个while循环不能实现&#xff08;后面通过看题解知道list1&#xff01;null&&list2&#xff01;null&#xff09; …

修改 docker /dev/shm 的大小

修改 docker /dev/shm 的大小 1&#xff0c;获取完整id&#xff1a; docker inspect 245| grep Id rootlynxi:~# docker inspect 245| grep Id"Id": "245ab167ed9a79873b31b3a38df2053870fe72f267c3c1a660df25c63e37e88b",2&#xff0c;修改 ShmSize&…

函数模板和类模板(初阶)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX&#x1f43c;个人WeChat&#xff1a;ILXOXVJE&#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&am…

【springboot配置文件加载源码分析】

在Spring Boot的源码中&#xff0c;配置文件的加载是在应用程序启动的早期阶段进行的。具体来说&#xff0c;配置文件加载的主要步骤发生在SpringApplication类的run()方法中的prepareEnvironment方法中&#xff0c;真正读取我们的配置文件还是PropertySourceLoader。 本篇博客…