多线程交替执行

package com.xsz.demo;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 兩個線程交替執行
 * @author cwqi
 */
public class AdvanceMutiThread {

	public static void main(String[] args) {

		final ThreadTest5 threadTest5 = new ThreadTest5();
		final int count = 5;

		new Thread(new Runnable() {

			@Override
			public void run() {
				for (int i = 0; i < count; i++) {
					threadTest5.addMethod();
				}

			}
		}).start();

		new Thread(new Runnable() {

			@Override
			public void run() {
				for (int i = 0; i < count; i++) {
					threadTest5.subtractMethod();
				}
			}
		}).start();

	}
}

class ThreadTest5 {

	private Lock lock = new ReentrantLock();
	private int cons = 0;
	int flag = 0;

	Condition con1 = lock.newCondition();
	Condition con2 = lock.newCondition();

	public void addMethod() { 
		// 執行加1
		lock.lock();

		try {
			while (flag % 2 != 0)
				con1.await();
			System.out.println("Thread A:  " + (++cons));
			flag++;
			con2.signal();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			lock.unlock();
		}
	}

	public void subtractMethod() { 
		// 執行減1
		lock.lock();
		try {
			while (flag % 2 == 0)
				con2.await();
			System.out.println("Thread B:  " + (--cons));
			flag++;
			con1.signal();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			lock.unlock();
		}
	}
}
时间: 2024-10-14 15:32:05

多线程交替执行的相关文章

Java多线程的交替执行

读完Think In Java的多线程,深有感悟,花了1个小时,写了一个多线程交替执行程序,大家可以参考,如有好的意见,请提出,谢谢! package com.thread; public class ThreadTest implements Runnable { public void run() { int j = 0; while (true) { try { synchronized (this) { if (j == 5) { j = 0; Tmp.getA().setOnoff(t

多线程异步执行脚本

获取远程计算机信息: $d=get-date $servers="10.4.34.41","10.4.34.40","10.4.34.36","10.4.34.37","10.4.34.39" $serverpass="Dell1950" $UserName="Administrator" #定义线程数量$throttleLimit = 5$SessionState

线程的2种实现和线程的交替执行

学了线程,收获不少,记录下了吧. 一.线程的主要两种实现方法. 1.继承Thread类,重写run()方法 main方法中创建子类,引用调用start()方法 实例如下: //继承Thread类,重写run()方法 public class ThreadOne extends Thread { public void run() { for (int i = 1; i <=100; i++) { System.out.println(this.getName()+":"+i);

嵌套的for循环执行顺序。可以让内外for循环交替执行。简单解析json数组。求js中两个时间差值。

1.刚接到不久的工作任务,其中包含一个解析json数组,然后让解析后的数据显示在用zrender画出来的矩形上.效果如下所示(注:没有实际意义) 2.至于zrender等空闲了一定写上使用心得,东西很强大. 3.中间有一项是算计相邻的两个时间的时间差(所有这些时间都是在一个数组里),如图所示,算计相邻两个矩形上时间的差值.延伸一下可以是算一个数组里相邻两个数字的差值. 贴上我的代码 :  for (var m = 0; m < dataObj.length - 1; m++) {        

使用JVMTI获取Java多线程程序指令执行次序

使用JVMTI获取Java多线程程序指令执行次序 在Java多线程程序中,由于线程调度,指令间的次序在每次运行时都可能不相同,有时候,我们需要得到指令次序,用来分析程序的行为.这样细粒度的底层行为用一般方法很难完成,我们需要借助 JVM Tool Interface,即JVMTI,来帮助我们获取Java虚拟机执行时的信息.本文先介绍编写JVMTI程序的基本框架,然后介绍如何使用JVMTI来获取多线程程序中指令之间的次序. JVMTI简介 JVMTI是用于编写开发与监视工具的编程接口,使用它可以检

python:使用多线程同时执行多个函数

使用多线程同时执行多个函数 import time import os import threading def open_calc(): with open('test.txt', 'r') as f: for line in f.readlines(): while 'hello' in line: os.system("calc.exe") # 如果字符串已经出现并已经执行命令,则终止程序,否则会一直执行命令 return # 等for循环判断完没有标识后再休眠重新调用该函数 p

Java多线程,线程交替执行

两个线程,一个打印1-100的奇数,一个打印1-100的偶数:要求:线程1打印5个之后,线程2开始打印,线程2打印5个之后,线程1再开始打印,以此循环. Code: package com.qhong; public class Main { /* * 两个线程,一个打印1-100的奇数,一个打印1-100的偶数:要求:线程1打印5个之后,线程2开始打印,线程2打印5个之后,线程1再开始打印,以此循环. */ private static int state = 1; private stati

GCD网络多线程---同步执行,异步执行,串行队列,并行队列

总结:同步(不管是串行还是并行)----不开辟子线程 异步(不管是串行还是并行)----开辟子线程 GCD: dispatch queue 主线程的main queue 并行队列 global dispatch queue 串行队列serial queues 一般用于按顺序同步访问 #pragma mark - 加载多线程 - (void) _loadMutil { //GCD基于C语言 //1.主对列:(串行队列) dispatch_queue_t mainQueue=dispatch_get

Python利用多线程定时执行cmd命令关机

利用os模块可以执行cmd命令,利用这一点可以实现定时关机,然而在等待关机的过程中也不能啥都不干,于是多线程派上了用场. #! /usr/bin/env python #coding=utf-8 #这里需要引入三个模块 import time, os, sched, easygui, thread # 第一个参数确定任务的时间,返回从某个特定的时间到现在经历的秒数 # 第二个参数以某种人为的方式衡量时间 schedule = sched.scheduler(time.time, time.sle