热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

多线程的几个方法

为什么80%的码农都做不了架构师?packageapiDemo;importjava.util.Random;importjava.util.concurre

为什么80%的码农都做不了架构师?>>>   hot3.png

package apiDemo;import java.util.Random;
import java.util.concurrent.*;/*** anyou*/
public class newDemo {/*** 让两个线程依次执行*/private static void demo1(){Thread A &#61; new Thread(new Runnable() {&#64;Overridepublic void run() {printNumber("A");}});Thread B &#61; new Thread(new Runnable() {&#64;Overridepublic void run() {printNumber("B");}});A.start();B.start();}/*** 结果&#xff1a;* Bprint1Aprint1Aprint2Bprint2Bprint3Aprint3*//*** B在A执行完之后再执行*/private static void demo2(){final Thread A &#61; new Thread(new Runnable() {&#64;Overridepublic void run() {printNumber("A");}});Thread B &#61; new Thread(new Runnable() {&#64;Overridepublic void run() {System.out.println("B 开始等待 A");try {A.join();} catch (InterruptedException e) {e.printStackTrace();}printNumber("B");}});B.start();A.start();}/*** 结果&#xff1a;* B 开始等待 AAprint1Aprint2Aprint3Bprint1Bprint2Bprint3*//*** A和B交叉运行*/private static void demo3(){final Object lock &#61; new Object();Thread A &#61; new Thread(new Runnable() {&#64;Overridepublic void run() {synchronized (lock) {System.out.println("A 1");try {System.out.println("A is waiting!");lock.wait();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("A 2");System.out.println("A 3");}}});Thread B &#61; new Thread(new Runnable() {&#64;Overridepublic void run() {synchronized (lock) {System.out.println("B 1");System.out.println("B 2");System.out.println("B 3");lock.notify();}}});A.start();B.start();}/*** 结果&#xff1a;* A 1A is waiting!B 1B 2B 3A 2A 3*//*** 四个线程 A B C D&#xff0c;其中 D 要等到 A B C 全执行完毕后才执行&#xff0c;而且 A B C 是同步运行的*/private static void runDAfterABC(){int worker &#61; 3;final CountDownLatch countDownLatch &#61; new CountDownLatch(worker);new Thread(new Runnable() {&#64;Overridepublic void run() {System.out.println("D is waiting for other three threads!");try {countDownLatch.await();System.out.println("All done, D starts working");} catch (InterruptedException e) {e.printStackTrace();}}}).start();for (char threadName &#61; &#39;A&#39;; threadName <&#61; &#39;C&#39;; threadName &#43;&#43;){final String tN &#61; String.valueOf(threadName);new Thread(new Runnable() {&#64;Overridepublic void run() {System.out.println(tN &#43;" is working");try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(tN &#43; " finished");countDownLatch.countDown();}}).start();}}/*** 结果&#xff1a;* D is waiting for other three threads!A is workingB is workingC is workingA finishedB finishedC finishedAll done, D starts working*//*** 三个运动员各自准备&#xff0c;等到三个人都准备好后&#xff0c;再一起跑*/private static void runABCWhenAllReady(){int runner &#61; 3;final CyclicBarrier cyclicBarrier &#61; new CyclicBarrier(runner);final Random random &#61; new Random();for (char runnerName &#61; &#39;A&#39;; runnerName <&#61; &#39;C&#39;;runnerName&#43;&#43;){final String rN &#61; String.valueOf(runnerName);new Thread(new Runnable() {&#64;Overridepublic void run() {long prepareTime &#61; random.nextInt(10000) &#43; 100;System.out.println(rN &#43; " is preparing for time: "&#43;prepareTime);try {Thread.sleep(prepareTime);} catch (InterruptedException e) {e.printStackTrace();}try {System.out.println(rN &#43; "is prepared, waiting for others");cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}System.out.println(rN &#43; "starts running");}}).start();}}/*** 结果&#xff1a;* A is preparing for time: 5592B is preparing for time: 2906C is preparing for time: 5513Bis prepared, waiting for othersCis prepared, waiting for othersAis prepared, waiting for othersAstarts runningBstarts runningCstarts running*//*** 子线程完成某件任务后&#xff0c;把得到的结果回传给主线程*/private static void doTaskWithResultInWorker(){Callable callable &#61; new Callable() {&#64;Overridepublic Integer call() throws Exception {System.out.println("Task starts");Thread.sleep(1000);int result &#61; 0;for (int i&#61;0;i<&#61;100;i&#43;&#43;){result &#43;&#61; 1;}System.out.println("Task finished and return result");return result;}};FutureTask futureTask &#61; new FutureTask(callable);new Thread(futureTask).start();try {System.out.println("Before futureTask.get()");System.out.println("Result: "&#43; futureTask.get());System.out.println("After futureTask.get()");} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}/*** 结果&#xff1a;* Before futureTask.get()Task startsTask finished and return resultResult: 101After futureTask.get()*//*** 将目标字符串打印出来* &#64;param threadName*/private static void printNumber(String threadName){int i &#61; 0;while (i&#43;&#43; <3){try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(threadName &#43; "print" &#43; i);}}public static void main(String[] args) {
// demo1();
// demo2();
// demo3();
// runDAfterABC();
// runABCWhenAllReady();doTaskWithResultInWorker();}
}

 


转:https://my.oschina.net/ayo123/blog/1572808



推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • java多线程获取线程返回结果
    我们在使用java多线程编写相关业务代码时,往往有这样一种情况,某个线程依赖于其他线程执行结果。也就是说,我们需要在一个线程中获取另一个线程的信息。可以分为两种情况,一种是轮询,一 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • SoIhavealoopthatrunsperfectforeventsandonlyshowsfutureposts.TheissueisthatIwould ... [详细]
author-avatar
不如藏拙_487
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有