java实现123n_java三线程交替打印123……n

使用多线程交替打印1--n,a进程打印1,4,7,……(3n+1),b进程打印2,7,10,……(3n+2),c进程打印3,6,9,……(3n)

涉及到多线程的同步,阻塞,wait,notify

代码如下

Num.java

public class Num {

private int num = 0;

public Num(int num) {

this.num = num;

}

public synchronized void printOne() {

try {

while (num%3!=1) {

this.wait();

}

System.out.println(Thread.currentThread().getName() + "------->"

+ (num++));

Thread.sleep(1000);

this.notifyAll();

} catch (Exception e) {

e.printStackTrace();

}

}

public synchronized void printTwo() {

try {

while (num%3!=2) {

this.wait();

}

System.out.println(Thread.currentThread().getName() + "------->"

+ (num++));

Thread.sleep(1000);

this.notifyAll();

} catch (Exception e) {

e.printStackTrace();

}

}

public synchronized void printThr() {

try {

while (num%3!=0) {

this.wait();

}

System.out.println(Thread.currentThread().getName() + "------->"

+ (num++));

Thread.sleep(1000);

this.notifyAll();

} catch (Exception e) {

e.printStackTrace();

}

}

} 三个线程类

public class PrintOne implements Runnable {

private Num num;

public PrintOne(Num num) {

this.num = num;

}

@Override

public void run() {

while (true) {

num.printOne();

}

}

}

public class PrintTwo implements Runnable {

private Num num;

public PrintTwo(Num num) {

this.num = num;

}

@Override

public void run() {

while (true) {

num.printTwo();

}

}

}

public class PrintThr implements Runnable {

private Num num;

public PrintThr(Num num) {

this.num = num;

}

@Override

public void run() {

while (true) {

num.printThr();

}

}

}

测试类

public class Test {

public static void main(String[] args) {

Num num = new Num(0);

Thread pOne = new Thread(new PrintOne(num));

Thread pTwo = new Thread(new PrintTwo(num));

Thread pThr = new Thread(new PrintThr(num));

pOne.setName("3n+1");

pTwo.setName("3n+2");

pThr.setName("3n ");

pOne.start();

pTwo.start();

pThr.start();

}

}

效果

3n ------->0

3n+1------->1

3n+2------->2

3n ------->3

3n+1------->4

3n+2------->5

…………

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

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

相关文章

8月12

MTBF两次故障的时间,时间越长越好。 MTTR两次系统恢复的时间,越短越好 修改完参数后若出现报205的错误,检查路径 控制文件 SQL> show parameter control_files SQL> select * from v$controlfile; 修改路径: $ cd $ORACLE_H…

spring roo_使用Spring Roo进行快速云开发–第2部分:VMware Cloud Foundry

spring rooSpring Roo是在Java平台上提供快速应用程序开发的工具。 我已经解释了何时使用它: http : //www.kai-waehner.de/blog/2011/04/05/when-to-use-spring-roo 。 Spring Roo目前支持两种针对云计算的解决方案:Google App Engine(GAE&a…

this指针 java_彻底理解Java中this指针

每次看到Java中的this指针,总摸不着头绪。在网上看了很多人的讲解,还是不知道this指针到底是什么东西,今天的的这篇日志可以让你看清this到底是谁。(内容摘自:http://www.mathcs.emory.edu/~cheung/Courses/170.2010/Syllabus/03/…

python中的浅拷贝和深拷贝

本篇介绍下python中的深拷贝和浅拷贝,主要从基本类型、类、不可变类型等方面进行介绍。 1.介绍拷贝之前首先应该明白is和的区别,即is表示同一个对象,比较的是值 >>> a 1000 >>> b 1000 >>> a b True >>&…

Spring开发人员知道的一件事

在最近关于(核心)Spring Framework的培训课程中,有人问我:“(Java)Spring开发人员是否应该知道一件事,那应该是什么?” 这个问题使我措手不及。 是的,(核心&a…

mysql匿名事务gtid_MySQL GTID (二)

MySQL GTID 系列之二三.在线将GTID转化为传统模式环境见上篇系列文章关闭GTID,不用停止服务,不影响线上业务3.1 关闭GTID复制,调整为传统复制#SLVAE实例上停止复制STOP SLAVE#SLVAE实例上查看复制的位置SHOW SLAVE STATUS \G# 查看 Master_Log_File 和 Read_Master_Log_Pos对应…

JavaWeb(十七)——JSP中的九个内置对象

一、JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。  由于JSP第一次访问…

jrockit_JRockit – JRCMD有用的命令

jrockit自2007年以来,我一直在使用JRockit。我发现它的速度比Hotspot慢,但在诊断和分析问题上总是更好。 从去年夏天开始,我一直在为一家国际电信系统供应商工作。 我们在HP OpenCall融合通信平台之上为电信运营商设计和实施各种产品。 我是开…

java并发问题_并发理论基础:并发问题产生的三大根源

并发问题变幻莫测,一谈到并发就显得非常高深,一般的程序员对于并发问题也是头疼不已,但是随着网络互联越来越普遍,大规模用户访问网站程序也越来越频繁,并发问题又无法避免。在我们解决并发问题前首先要理解产生并发问…

[luoguP1849] [USACO12MAR]拖拉机Tractor(spfa)

传送门 神奇的spfa #include <queue> #include <cstdio> #include <cstring> #include <iostream> #define N 1010 #define max(x, y) ((x) > (y) ? (x) : (y))int n, mx, my; int dis[N][N]; bool map[N][N], vis[N][N]; int dx[4] {0, -1, 0, 1…

在Eclipse上创建JSF / CDI Maven项目

当我在研究JSF和CDI示例时&#xff0c;我认为提及创建JSF和CDI Maven项目所需的步骤会很有用。 您可以找到以下步骤。 工具类 默认情况下&#xff0c;M2E插件随附的Eclipse Luna。 因此&#xff0c;无需自己安装插件。 WildFlye8.x。 从主菜单中选择文件->新建->其他。…

luoguP3690 【模板】Link Cut Tree (动态树)[LCT]

题目背景 动态树 题目描述 给定&#xff2e;个点以及每个点的权值&#xff0c;要你处理接下来的&#xff2d;个操作。操作有&#xff14;种。操作从&#xff10;到&#xff13;编号。点从&#xff11;到&#xff2e;编号。 &#xff10;&#xff1a;后接两个整数&#xff08;&a…

python爬虫多进程_Python爬虫技术--基础篇--多进程

要让Python程序实现多进程(multiprocessing)&#xff0c;我们先了解操作系统的相关知识。Unix/Linux操作系统提供了一个fork()系统调用&#xff0c;它非常特殊。普通的函数调用&#xff0c;调用一次&#xff0c;返回一次&#xff0c;但是fork()调用一次&#xff0c;返回两次&am…

java 电力系统_算法java实现--动态规划--电路布线问题

/** dianlubuxian.java* Version 1.0.0* Created on 2017年11月30日* Copyright ReYo.Cn*/package reyo.sdk.utils.test.dy;/*** 创 建 人&#xff1a;AdministratorReyoAut * 创建时间&#xff1a;2017年11月30日 下午4:58:56** author ReYo* version 1.0*//*** 电路布线问题(…

百度图片网址

http://qcloud.dpfile.com/pc/jPAgaVMWC7zueHYEzky7IUJs0w6QIgvTQ0p08wxCK1OUDUk6-KqvLg70OVUXtjEHTYGVDmosZWTLal1WbWRW3A.jpg转载于:https://www.cnblogs.com/leshen/p/7387677.html

antlr idea 入门_ANTLR:入门

antlr idea 入门这篇文章使您了解ANTLR的基础知识。 以前&#xff0c;我们已经了解了如何将ANTLR设置为外部工具。 在这里&#xff1a; ANTLR外部工具 :) 所以&#xff0c;我们开始…。 什么是ANTLR&#xff1f; •另一个语言识别工具&#xff0c;是一种语言工具&#xff0c;它…

typescript主键自增长

常见的不重复id创建方式有两种&#xff0c;一个是搞一个自增长数列&#xff0c;另一个是采用随机生成一组不可能重复的字符序列&#xff0c;常见的就是UUID了。我们来引入一个uuid的包&#xff1a;npm i --save angular2-uuid&#xff0c;由于这个包中已经含有了用于typescript…

java api操作hbase_通过JavaAPI使用HBase

1.准备工作(1) 启动zookeeper服务&#xff0c;我的是在本地启动zookeeper/usr/local/zookeeper/bin$ sudo zkServer.sh start(2) 启动HBase和HBase shell启动HBase:/usr/local/hbase/bin下启动start-hbase.sh启动HBase shell/usr/local/hbase/bin下终端输入hbase shell(3) 工程…

SPOJ QTREE5 lct

题目链接 对于每一个节点&#xff0c;记录这个节点所在链的信息&#xff1a; ls:&#xff08;链的上端点&#xff09;距离链内部近期的白点距离 rs:&#xff08;链的下端点&#xff09;距离链内部近期的白点距离 注意以上都是实边 虚边的信息用一个set维护。 set维护的是…

Java EE 8 MVC:使用路径参数

在上一篇文章中&#xff0c;我们看到了如何在Java EE MVC中使用查询参数 。 这篇文章继续与一个非常相似的主题&#xff1a;路径参数。 路径参数是请求路径的动态部分&#xff0c;可以使用Path注释指定。 例如&#xff1a; Controller Path("path-params") public…