`
BabyDuncan
  • 浏览: 584421 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计4个线程,两个对i加1,两个对j减1

阅读更多
public class fourThread {

	int i = 10;
	int j = 50;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 fourThread ft = new fourThread();
		plus addi = ft.new plus();
		minus minusj = ft.new minus();
		Thread t = new Thread(addi);
		t.start();
		Thread t1 = new Thread(addi);
		t1.start();
		Thread tj = new Thread(minusj);
		tj.start();
		Thread tj1 = new Thread(minusj);
		tj1.start();
	}

	public synchronized void add() {
		i++;
		System.out.println(Thread.currentThread().getName()
				+ "对i + 1 : " + i);
	}
	public synchronized void minus() {
		j--;
		System.out.println(Thread.currentThread().getName()
				+ "对j - 1 : " + j);
	}

	class plus implements Runnable {

		@Override
		public void run() {
			// TODO Auto-generated method stub
			for (int q = 0; q < 10; q++) {
				add();
			}
		}

	}

	class minus implements Runnable {

		@Override
		public void run() {
			// TODO Auto-generated method stub
			for (int p = 0; p < 10; p++) {
				minus();
			}
		}
	}
}


运行结果:
Thread-0对i + 1 : 11
Thread-3对j - 1 : 49
Thread-3对j - 1 : 48
Thread-3对j - 1 : 47
Thread-3对j - 1 : 46
Thread-3对j - 1 : 45
Thread-3对j - 1 : 44
Thread-3对j - 1 : 43
Thread-3对j - 1 : 42
Thread-3对j - 1 : 41
Thread-3对j - 1 : 40
Thread-0对i + 1 : 12
Thread-0对i + 1 : 13
Thread-0对i + 1 : 14
Thread-0对i + 1 : 15
Thread-0对i + 1 : 16
Thread-0对i + 1 : 17
Thread-0对i + 1 : 18
Thread-0对i + 1 : 19
Thread-0对i + 1 : 20
Thread-2对j - 1 : 39
Thread-2对j - 1 : 38
Thread-2对j - 1 : 37
Thread-2对j - 1 : 36
Thread-2对j - 1 : 35
Thread-2对j - 1 : 34
Thread-2对j - 1 : 33
Thread-2对j - 1 : 32
Thread-2对j - 1 : 31
Thread-2对j - 1 : 30
Thread-1对i + 1 : 21
Thread-1对i + 1 : 22
Thread-1对i + 1 : 23
Thread-1对i + 1 : 24
Thread-1对i + 1 : 25
Thread-1对i + 1 : 26
Thread-1对i + 1 : 27
Thread-1对i + 1 : 28
Thread-1对i + 1 : 29
Thread-1对i + 1 : 30

分享到:
评论

相关推荐

    线程练习题2

    实现两个线程,一个线程打印1-52,另一个线程打印A-Z,要求输出的结果如下: 1 2 A 3 4 B 5 6 C 7 8 D 9 10 11 12 ... 52 E F G H I J K ... X Y Z 即:当数字小于9时,数字和字母交替打印; 当数字大于等于9时,先把...

    多线程编程实现矩阵乘法

    这个过程对所有的i从0到m-1和j从0到p-1进行迭代。 当矩阵规模增大时,单线程计算矩阵乘法可能会变得非常耗时。因此,我们利用多线程来并行计算不同的部分,以加快运算速度。一种常见的策略是将大矩阵划分为更小的...

    log4j-API-最新稳定版本log4j-1.2.17

    7. **MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context)**:这两个特性提供了上下文信息,帮助追踪和调试多线程环境中的问题。 8. **自定义日志等级和日志事件**:开发者可以通过继承`Priority`...

    多线程实现冒泡,快速排序

    冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 实验中的冒泡...

    多线程矩阵乘法计算

    假设我们有两个矩阵A(m×n)和B(n×p),它们的乘积C(m×p)的每个元素ci,j可以通过以下公式计算得出: \[ C[i][j] = \sum_{k=1}^{n} A[i][k] \times B[k][j] \] 在单线程环境下,这个过程是从头到尾按顺序执行...

    java多线程操作简单示例

    在给出的代码片段中,作者采用的是实现`Runnable`接口的方式创建了两个线程:`Inc`用于增加变量`j`的值,`Dec`用于减少变量`j`的值。下面对代码进行详细分析: ```java public class TestThreads { private int j ...

    计算机操作系统实验操作系统中的线程同步源码文档

    2. **创建两个线程**:分别对全局变量`i`执行加1操作和减1操作。每个线程执行相同次数(例如900万次)。 ```c DWORD __stdcall fun1(LPVOID p1) { for (int j = 0; j ; j++) { i++; } return 0; } DWORD __...

    Ruby多线程编程初步入门

    以下是一个简单的Ruby多线程程序示例,演示了如何创建和管理两个并发执行的线程: ```ruby #!/usr/bin/ruby def func1 i = 0 while i puts "func1 at: #{Time.now}" sleep(2) i += 1 end end def func2 j ...

    Java多线程聊天

    创建一个新线程有两种方式:继承`Thread`类并重写`run()`方法,或者实现`Runnable`接口并提供`run()`方法。在聊天程序中,每个用户可能对应一个线程,用于处理用户的输入和输出。 2. **并发编程**:在多线程聊天...

    易语言源码易语言启动线程参数的用处.rar

    该函数通常需要两个参数:线程函数指针和线程参数。线程函数指针是指向将在新线程中执行的函数,而线程参数则可以传递给这个函数,用于在新线程中传递特定的数据。 三、线程参数的用处 1. 数据传递:线程参数可以...

    找出两个字符串之间相同字符算法题

    上述代码将会把`str1`和`str2`分别拆分为`{"3", "5"}`和`{"1", "3", "4", "5"}`两个数组。 ##### 步骤2:遍历比较 接下来,我们需要遍历第一个数组中的所有子串,并检查这些子串是否存在于第二个数组中。这可以通过...

    操作系统线程同步机制实验报告

    1. **无同步机制**:设计并实现一个简单的多线程银行转账程序,其中两个线程共享资源但没有使用任何同步手段。 2. **使用Mutex互斥量**:在第一部分的基础上增加Mutex互斥量,以确保对共享资源的互斥访问。 3. **...

    C++实现三维动态数组,赋值加减乘算法

    这里我们假设运算的对象是两个相同大小的三维数组。 ```cpp int*** add3D(int*** arr1, int*** arr2, int nx, int ny, int nz) { int*** result = allocate3D(nx, ny, nz); for (int i = 0; i ; ++i) { for (int...

    多线程,高并发.pdf

    在这个例子中,我们创建了一个`ThreadTest`类,其中包含两个内部类`Adder`和`Subtractor`,分别实现了`Runnable`接口。每个线程都会通过`ReentrantLock`来同步对`j`变量的访问。这里使用`lock.lock()`和`lock.unlock...

    Log4j写入数据库详解

    确保项目中有log4j和commons-logging两个jar文件。如果使用的是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;log4j &lt;artifactId&gt;log4j &lt;version&gt;1.2.17 &lt;groupId&gt;commons-logging ...

    多线程异步调用(并参递参数)

    在这个例子中,`long_running_task`是一个耗时任务,接受两个参数`param1`和`param2`。我们创建了一个`ThreadPoolExecutor`,它负责管理线程池,然后使用`submit`方法提交任务到线程池,每个任务都带有不同的参数。`...

    java笔试汇总 经典中的经典!绝对超值!还等什么 下载评分吧!!!

    例如:1、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 public class ThreadTest1{ private int j; public static void main(String args[]){ ThreadTest1 tt=new ThreadTest...

    基于Java的两个通用安全模块的设计与实现(源代码+论文).zip

    这两个模块可能集成了审计和日志框架,如Log4j或java.util.logging。 10. **源代码分析**: 论文中可能会详细解释每个模块的设计决策,包括类和方法的组织,以及如何实现特定的安全功能。源代码分析可以帮助读者...

    23237779890jji.zip

    其中,v_i(t+1)是下一次迭代的速度,w是惯性权重,c1和c2是加速常数,r1和r2是两个[0,1]之间的随机数,pbest_i是粒子i的局部最优解,x_i(t)是当前粒子的位置,gbest是全局最优解。 3. 更新位置:粒子的新位置由...

    自增与自减

    在计算机编程领域,自增与自减是两个非常基础且重要的概念,它们在各种编程语言中都有所应用。通过本文,我们将深入探讨自增与自减的概念、工作原理以及在实际编程中的应用技巧,希望能够帮助读者更深刻地理解这两个...

Global site tag (gtag.js) - Google Analytics