多线程(简单实现)

继承Thread类

  • 两条线程交替进行
  • 创建线程方式一:继承Theard类,重写run方法,调用start开启线程
  • 总结:注意,线程开启不一定立即执行,由CPU调度执行
//两条线程交替进行//创建线程方式一:继承Theard类,重写run方法,调用start开启线程
//总结:注意,线程开启不一定立即执行,由CPU调度执行
package com.zeng.demo01;
public class TestTheard01 extends Thread{@Overridepublic void run() {//run方法线程体for (int i = 0; i < 20; i++) {System.out.println("hello --"+i);}}public static void main(String[] args) {//main线程,主线程//创建一个线程对象TestTheard01 testTheard01 = new TestTheard01();//调用start方法开启线程testTheard01.start();for (int i = 0; i < 20; i++) {System.out.println("hello word--"+i);}}
}

实现Runnable

  • 创建线程方法2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法
  • 创建线程对象,通过线程对象来开启我们的线程代理
Thread thread = new Thread(testThread02);
thread.start();
package com.zeng.demo01;
//创建线程方法2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法
public class TestThread02 implements Runnable{@Overridepublic void run() {//run方法线程体for (int i = 0; i < 200; i++) {System.out.println("hello woeld--"+i);}}public static void main(String[] args) {//创建runnable接口的实现类对象TestThread02 testThread02 = new TestThread02();//创建线程对象,通过线程对象来开启我们的线程代理
//        Thread thread = new Thread(testThread02);
//        thread.start();new Thread(testThread02).start();for (int i = 0; i < 200; i++) {System.out.println("hello--"+i);}}
}
  • 多个线程同时操纵同一个对象
  • 买火车票的例子
  • 发现问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱
package com.zeng.demo01;
//多个线程同时操纵同一个对象
//买火车票的例子//发现问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱
public class TestThread03 implements Runnable{//票数private int ticketNums=10;@Overridepublic void run() {while(true){if(ticketNums<=0){break;}// 模拟延时try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"票");}}public static void main(String[] args) {TestThread03 ticket = new TestThread03();new Thread(ticket,"小明").start();new Thread(ticket,"老师").start();new Thread(ticket,"黄牛党").start();}
}
  • 模拟龟兔赛跑
  • 模拟兔子休息Thread.Sleep(/*时间:单位毫秒*/);
package com.zeng.demo01;
//,模拟龟兔赛跑
public class Race implements Runnable{//胜利者private static String winner;@Overridepublic void run() {for (int i = 0; i <= 100; i++) {//模拟兔子休息if(Thread.currentThread().getName().equals("兔子")&&i%10==0){try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}}//判断比赛是否结束boolean flag=gameOver(i);//如果比赛结束了,就停止程序if(flag){break;}System.out.println(Thread.currentThread().getName()+"-->跑了"+i+"步");}}//判断是否完成比赛private  boolean gameOver(int steps){//判断是否有胜利者if(winner!=null){return true;}if(steps>=100){winner=Thread.currentThread().getName();System.out.println("winner is"+winner);return true;}return false;}public static void main(String[] args) {Race race = new Race();new Thread(race,"兔子").start();new Thread(race,"乌龟").start();}
}

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

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

相关文章

用C#在STM32上写第一个Hello world

随着微软放弃.Net MF ,通过C#编写STM32 平台上的程序变得渺茫&#xff0c; 但是&#xff0c; 别着急&#xff0c; 目前至少有两个社区在做这件事情&#xff0c; 传承了微软的.Net MF , 一家是 nanoframework,另外一家比较封闭的是 GHI Electronics 地址是: https://github.com/…

如何找到Eclipse左侧项目栏

如何找到Eclipse左侧项目栏 window --> Show View --> other --> Java–> package Explorer

静态代理模式(多线程底部原理)

静态代理模式总结(线程底部原理) 真实对象和代理对象都要实现同一个接口代理对象要代理真实角色好处&#xff1a; - 代理对象可以做很多真实对象做不了的事情 - 真实对象专注做自己的事情创建静态代理模式&#xff1a;一个接口&#xff08;当前创建为函数式接口&#xff08;只…

深入async/await知多少

.net的async/await功能相信对很多人来说并不陌生了&#xff0c;有人感觉这功能很好&#xff0c;但也有人说这功能不好容易产生一些莫名其妙的死锁&#xff1b;有人说这些异步功能也有人说这是同步功能。其实在使用async/await的有多少人真的了解它们呢&#xff1f;接下来详细地…

Java中各种整形类型可以表示的范围

对于整型类型&#xff0c;Java只定义了带符号的整型&#xff0c;因此&#xff0c;最高位的bit表示符号位&#xff08;0表示正数&#xff0c;1表示负数&#xff09;。各种整型能表示的最大范围如下&#xff1a; byte&#xff1a;-128 ~ 127 short: -32768 ~ 32767 int: -214748…

Lambda表达式(多线程实现)

推导lambda表达式 Lambda表达式&#xff0c;避免匿名内部类定义过多&#xff0c;其实质属于函数式编程的概念&#xff1b; 去掉一些没有意义的代码&#xff0c;只留下核心代码&#xff1b; 当前接口为函数式接口&#xff08;任何一个接口&#xff0c;如果只包含唯一一个抽象方…

微软正式发布 gRPC-Web for .NET

今年一月份的时候&#xff0c;微软曾宣布对 gRPC-Web for .NET 的实验性支持微软实验性地对 .NET 支持 gRPC-Web&#xff0c;现在它已正式发布。gRPC 是谷歌开源的高性能、通用 RPC 框架&#xff0c;支持包括 .NET 在内的多种编程语言。它面向移动和基于 HTTP/2 标准设计&#…

Java多线程(review)

文章目录线程状态线程方法线程停止线程休眠——sleep网络延时模拟倒计时与打印当前系统时间线程礼让——yield线程强制执行——Join线程状态线程优先级守护线程不安全案例死锁Lock锁线程状态 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后&#xff0c;该线…

Java,C++四舍五入

如果要进行四舍五入&#xff0c;可以对浮点数加上0.5再强制转型&#xff1a; package HomeTest01;public class Main {public static void main(String[] args){double a 0.6;System.out.println((int)(a0.5));double b 0.4;System.out.println((int)(b0.5));}}C也同理&…

利用Azure Functions和k8s构建Serverless计算平台

题记&#xff1a;昨晚在一个技术社区直播分享了“利用Azure Functions和k8s构建Serverless计算平台”这一话题。整个分享分为4个部分&#xff1a;Serverless概念的介绍、Azure Functions的简单介绍、k8s和KEDA的介绍和最后的演示。ServerlessServerless其实包含了两种概念&…

Java格式化输出

Java还提供了格式化输出的功能。为什么要格式化输出&#xff1f;因为计算机表示的数据不一定适合人来阅读。 如果要把数据显示成我们期望的格式&#xff0c;就需要使用格式化输出的功能。格式化输出使用System.out.printf()&#xff0c;通过使用占位符%?&#xff0c;printf()…

基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

并发协作模型“生产者/消费者模式“

java提供了几个方法解决线程之间的通信问题 方法名作用wait()表示线程一直等待&#xff0c;直到其他线程通知&#xff0c;与sleep不同&#xff0c;会释放锁wait(long timeout)指定等待的毫秒数notify唤醒一个处于等待状态的线程notifyAll()唤醒同一个对象上所有调用wait()方法…

使用线程池

JDk5.0起提供了线程池相关的API&#xff1a;ExecutorService和ExecutorsExectorService&#xff1a;真正的线程池接口。常见的子类ThreadPoolExecutor void execute(Runnable command):执行任务/命令&#xff0c;没有返回值&#xff0c;一般用来执行RunnableFuturesubmit(Calla…

对 JsonConvert 的认识太肤浅了,终于还是遇到了问题

一&#xff1a;背景1. 讲故事在开始本文之前&#xff0c;真的好想做个问卷调查&#xff0c;到底有多少人和我一样&#xff0c;对 JsonConvert 的认识只局限在 SerializeObject 和 DeserializeObject 这两个方法上(┬&#xff3f;┬), 这样我也好结伴同行&#xff0c;不再孤单落…

Java继承-子类不可以继承父类的构造方法

子类不可以继承父类的构造方法&#xff0c;只可以调用父类的构造方法。 子类中所有的构造函数都会默认访问父类中的空参数构造函数&#xff0c;这是因为子类的构造函数内第一行都有默认的super&#xff08;&#xff09;语句。 super&#xff08;&#xff09;表示子类在初始化…

.Net微服务实战之DevOps篇

技术只是基础该系列的两篇文章《.Net微服务实战之技术选型篇》和《.Net微服务实战之技术架构分层篇》都是以技术角度出发描述微服务架构的实施。如果技术选型篇叙述的是工具&#xff0c;那么架构分层篇讲的就是技巧&#xff0c;而本篇要讨论的就是原则。一直以来我会给身边向我…

阿里云挑战赛

文章目录第一题题目&#xff1a;题解&#xff1a;第二题题目题解第三题题目题解第四题题目&#xff1a;题解第五题题目题解第六题题目题解第七题题目&#xff1a;题解第八题题目&#xff1a;题解;题解赛后出第一题 题目&#xff1a; 【单选】filter 方法意图过滤传入的订单列…

使用C#编写STM32对接物联网平台IoTSharp发送遥测数据

在之前的文章中&#xff0c; 我们阐述了如何用C#在STM32上写第一个Hello world &#xff0c; 有朋友抱怨国内介绍文章&#xff0c; 都是一个 Hello world &#xff0c; 然后再也没有音讯&#xff0c; 写到这里我想提一下我的初心&#xff0c; 那就是告诉所有人C#无所不能&…