`
annan211
  • 浏览: 448027 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

4个线程,2个每次加1,两个每次减1

 
阅读更多
package threadTest;

public class MultiThreadShareDemo {

	public static void main(String[] args) throws Exception {

		Data data = new Data();

		Plus p = new Plus(data);
		Cut c = new Cut(data);

		Thread t1 = new Thread(p);
		Thread t2 = new Thread(p);

		Thread t3 = new Thread(c);
		Thread t4 = new Thread(c);

		t1.start();
		t2.start();
		t3.start();
		t4.start();

	}
}

/**
 * 数据包装
 * @author jingfn
 *
 */
 class Data{
	 private int data;
	 private boolean flag;
	 private int count = 2;

	public synchronized Data plus(Data dataIns){
		while(flag){
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		dataIns.data = dataIns.data - 1;
		dataIns.count = dataIns.count - 1;
		System.out.println(Thread.currentThread().getName()+"--plus--------"+dataIns.data+"---"+dataIns.count);
		if(dataIns.count <= 0){
			dataIns.flag = true;
			this.notifyAll();
		}
		return dataIns;
	}

	public synchronized Data cut(Data dataIns){
		while(!flag){
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		dataIns.data = dataIns.data + 1;
		dataIns.count = dataIns.count + 1;
		System.out.println(Thread.currentThread().getName()+"--cut--"+dataIns.data+"---"+dataIns.count);
		if(dataIns.count >= 2){
			dataIns.flag = false;
			this.notifyAll();
		}
		return dataIns;
	}

 }

 /**
  * 加线程
  * @author jingfn
  *
  */
 class Plus implements  Runnable {
	 private Data instance;
	 public Plus(Data instance){
		 this.instance = instance;
	 }
	 public void run(){
		 while(true){
			 instance.plus(instance);
		 }
	 }
 }

 /**
  * 减线程
  * @author jingfn
  *
  */
 class Cut implements  Runnable {
	 private Data instance;
	 public Cut(Data instance){
		 this.instance = instance;
	 }
	 public void run(){
		 while(true){
			 instance.cut(instance);
		 }
	 }
 }

分享到:
评论

相关推荐

    java用线程的两种实现方式设计四个线程两次对J加1两次对J减1

    java用线程的两种实现方式设计四个线程两次对J加1两次对J减1

    设计4个线程,其中两个对j增加,两个对j减少

    本程序主要是通过利用线程类,内部类等方法实现对j的增减,个人看到面试题才做了一下

    j的多线程加减.zip

    设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

    操作系统——实验四 windows中线程的创建和同步控制

    这两个线程共享一个数组A,写线程对数组分别进行10次写操作,每次写操作对A的每个元素赋一个相同的值;读线程对数组分别进行10次读操作,每次读操作输出A中所有元素的值。写出相应代码,并分析运行结果。修改代码,使...

    多线程map容器互斥代码

    // 定义map对象来存储数据,主线程中定时向该对象插入数据,每次插入两个连续的数据插入后显示出当前map大小。 //第二个线程定时删除map中的数据,每次删除一个最前面的数据,删除后显示当前的map大小。 //当主线程...

    使用Java多线程的同步机制编写应用程序.docx

    2.银行有一个账户,有两个用户分别向同一个账户存3000元,每次存1000,存三次。 3.余额大于取款金额才可取钱 4.多人多次存取完毕后,余额正常 5.当一个用户对金额进行修改时,其他用户应不可进行修改,使用同步机制...

    Python程序设计:多线程爬虫.pptx

    在Python中可使用的多线程模块主要有两个,thread和threading模块。 threading模块允许创建和管理线程,提供了更多的同步原语。threading模块中最常用的类是Thread。 Python多线程爬虫 多线程爬虫代码 ...

    操作系统实验——获取当前系统运行进程的信息

    1. 在windows 下编写一个控制台应用程序,命名为an_ch2_1b。...而新创建的线程则不断地对shared_var 进行减1 操作,即每次循环shared_var 被减1。观察程序运行的结果,并对你看到的现象进行解释。

    Qt创建线程的两种方式+线程池方式

    1.方式1:继承 QThread 类方式:通过继承 QThread 类并重写 run() 函数来创建线程,线程对象本身即为线程。 优点:相对简单,易于理解和实现;可以直接重写 run() 函数来定义线程的逻辑;可以通过信号和槽机制与其他...

    Qt 多线程连接数据库——数据库连接池

    * 连接被复用,不是每次都重新创建一个新的连接(连接的创建是一个很消耗资源的过程) * 连接断开了后会自动重连 * 当无可用连接时,获取连接的线程会等待一定时间尝试继续获取,直到取到有效连接或者超时返回一...

    西南科技大学Java程序设计与实践 实验六 多线程实验实验报告及源码

    西南科技大学Java程序设计与实践 实验六 多线程实验实验报告及源码...2、分别采用Thread类的子类和Runnable接口两种方式完成两个线程的设计; 3、进行全面的测试并分析测试结果;4、简要说明你在该实验中的收获与体会。

    linux下多线程读取和显示文件

    通过程序创建两个线程,一个线程负责从文件”stat.c”读入数据,另一个线程负责显示读出的文件内容,每次读入 n 个字节,n 从键盘输入。

    面试编程题

    6、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。 7、列出某个目录下的所有文件。 8、编写一个Hibernate程序,用来获得所有的学生信息。 9、使用Struts2框架来实现页面国际化。 10、写一个...

    Java线程安全问题_动力节点Java学院整理

    总结java的内存模型,要解决两个主要的问题:可见性和有序性。我们都知道计算机有高速缓存的存在,处理器并不是每次处理数据都是取内存的。JVM定义了自己的内存模型,屏蔽了底层平台内存管理细节,对于java开发人员...

    java多线程笔记

    听歌和聊天就是两个任务,这个两个任务是“同时”进行的。一个任务一般对应一个进程,也可能包含好几个进程。比如运行的MSN就对应一个MSN的进程,如果你用的是windows系统,你就可以在任务管理器中看到操作系统正在...

    操作系统的共享内存实验代码

    上网找的资料,希望对大家有用,我看了还是不错的!!!

    现代操作系统实验.docx

    1. 实现一个“difftree”命令,其功能是比较两个目录下的文件结构和文件信息。当在命令行方式下执行“difftree &lt;dir1&gt; &lt;dir2&gt;”命令时,能够比较目录dir1和 目录dir2是否具有相同的结构,对相同的部分,进一步比较...

    多线程JAVA

     用两个线程分别完成画圆和画方的功能  每次绘制圆形或者方形的位置、大小和颜色值都是随机产生的

    常见面试算法题目

    1. 1 - 100, 找出质数 2. 冒泡排序 3. 1~100共一百个自然数,...6. 设计4个线程,其中两个线程每次对j增加1,另外两个线程每次对j减少1 7. 给你List A,已知,如 3,1,4,9,5```````100. 让你求出里面的最大值与最小值。

    egThread_线程_数据库后台查询例子_20200110.rar

    下面的例子给出了同时进行的两个线程查询。第一次按下按钮时,线程开始执行,以后 每次按下按钮时,如果线程处于挂起状态则继续执行,否则挂起线程,线程执行完毕之后将 连接 DataSource,查询结果将显示在相应的 ...

Global site tag (gtag.js) - Google Analytics