`

有一静态整形变量X,初始值为0,用JAVA写四个线程,二个对其加1,二个对其减一,X等于0时不进行减操作,X等于5时结束程序

    博客分类:
  • java
阅读更多

题目:

有一静态整形变量X,初始值为0,用JAVA写四个线程,二个对其加1,二个对其减一,X等于0时不进行减操作,X等于5时结束程序。

我的实现方式:

import java.util.Random;

public class StaticThread {
	private static int X=0;
	private static Random rd=new Random();
	public synchronized static void add(){
		if(X!=0){
			StaticThread.class.notifyAll();
		}
		X++;
		System.out.println(Thread.currentThread().getName()+": "+"add x: "+X);
	}
	
	public synchronized static void substract(){
		try{
		if(X==0){
			StaticThread.class.wait();
		}
		}catch(InterruptedException e){
			
		}
		X--;
		System.out.println(Thread.currentThread().getName()+": "+"substract x: "+X);

	}
	
	static class StaticAddThread extends Thread{
		public void run(){
			while(true){
				if(X==5){
					System.out.println("X=5");
					System.exit(0);
				}
				add();
				try{
					Thread.sleep(rd.nextInt(1000));
				}catch(InterruptedException e){
					
				}
			}
			
		}
	}
	
	static class StaticSubstractThread extends Thread{
		public void run(){
			while(true){
				if(X==5){
					System.out.println("X=5");
					System.exit(0);
				}
				substract();
				try{
					Thread.sleep(rd.nextInt(1000));
				}catch(InterruptedException e){
					
				}
			}
	}
	}
	
	public static void main(String[] args){
		StaticAddThread sat1=new StaticAddThread();
		StaticAddThread sat2=new StaticAddThread();
		
		StaticSubstractThread sst1=new StaticSubstractThread();
		StaticSubstractThread sst2=new StaticSubstractThread();
		
		sat1.start();
		sst1.start();
		sat2.start();
		sst2.start();

	}
}

 

 

 

分享到:
评论

相关推荐

    自测试卷5.doc1.简述C#、Java和C++的比较。 2.已知变量x的初值为24,则表达式x+=x--+=x%=17运算的结果值为( )。

    递归算法可以表示为F(n) = F(n-1) + F(n-2),初始值为F(0) = 0,F(1) = 1。使用递归计算第30位数,需要注意避免重复计算和栈溢出。 6. **成员变量和成员方法前加static的作用** static关键字用于声明静态成员,...

    利用静态变量对函数访问次数计数.zip

    1. 生命周期:静态变量在整个程序运行期间只初始化一次,其生命周期从定义时开始,直到程序结束。 2. 存储位置:静态变量存储在内存的静态存储区,不同于栈上的局部变量和堆上的动态变量。 3. 作用域:对于局部静态...

    Java static静态初始快

    6. **使用场景**:常用于设置静态变量的初始值,创建静态对象,或者执行一次性的系统设置操作。 在实际开发中,合理使用静态初始化块可以提高代码的组织性和效率。然而,过度依赖静态初始化块可能会导致代码难以...

    Java中的静态变量静态方法静态块与静态类.docx

    - 为了确保线程安全,静态变量常常与`final`关键字结合使用,将其声明为不可变的公共资源。 - **示例**: ```java public class StaticExample { private static int count; // 私有静态变量,用于控制其值...

    JAVAStatic静态变量.doc

    Java中的`static`关键字是用来声明静态变量或静态方法的,它是面向对象编程中非常关键的一个概念。静态变量属于类,而不是类的实例,这意味着它们在内存中只有一份拷贝,所有的类实例共享这个相同的变量。当我们声明...

    Static静态变量的应用(VB6.0代码编写)

    总的来说,Static静态变量是VB6.0编程中一个强大的工具,合理利用可以解决许多实际问题,但同时也需要谨慎处理,以确保代码的健壮性和效率。在实际编程中,我们需要根据具体需求权衡是否使用Static变量,以及如何...

    静态的魔力:Java中静态方法和变量的深度解析

    这段代码定义了一个名为`Counter`的类,其中包含一个静态变量`count`,用于记录已经创建了多少个`Counter`对象。每当创建一个新的`Counter`实例时,`count`值就会递增。 #### 四、静态方法的用途 静态方法是类级别...

    python类和函数中使用静态变量的方法

    静态变量在其他面向对象的语言如Java或C#中比较常见,但在Python中,由于其动态特性的存在,实现静态变量的方式稍有不同。本篇文章将详细介绍在Python中如何在类和函数中使用静态变量,并通过三个示例来说明。 **...

    类中静态成员变量和普通变量的区别——实例代码(VS2010)

    通过创建`MyClass`的两个实例`obj1`和`obj2`,我们可以看到它们各自拥有独立的`normalVar`副本,但共享同一个`staticVar`。当`setStatic`静态成员函数改变`staticVar`的值时,`obj1`和`obj2`的`printVars`输出都会...

    Java开发技术大全(500个源代码).

    clicker.java 一个计数用的线程类 demoPri.java 调用上面这个类设置线程优先级示例 myThread.java 自己定义的一个Thread的子类 mutexThread.java 一个能管理临界区的线程类 demoMutex.java 使用上面这个类来...

    使用Java静态关键字实现一个简单的计数器.txt

    ### 使用Java静态关键字实现一个简单的计数器 #### 背景介绍 在软件开发过程中,经常需要维护一些全局变量或者实现一些不依赖于特定对象实例的功能。在Java语言中,`static`关键字提供了一种非常实用的方法来实现...

    1变量简单小程序VC局部静态变量共3页.pdf.zip

    标题中的“1变量简单小程序VC局部静态变量”指的是在Visual C++(简称VC)编程环境中,使用C++语言编写的一个小型程序,该程序涉及到单个变量的运用,并且重点讲解了局部静态变量的概念和用法。局部静态变量是C++中...

    什么是静态(static)什么是静态方法,静态变量,静态块

    在Java编程语言中,"静态"(static)关键字是一个非常重要的概念,它具有多种用途,包括定义静态变量、静态方法、静态初始化块以及静态类。理解这些概念对于编写高效的Java代码至关重要。 首先,我们来解释静态变量...

    售票员大战.zip(Java运用静态变量多人销售票数进行分类)

    Java之静态变量是编程中的一个重要概念,特别是在多线程环境下处理共享数据时。在Java中,静态变量属于类,而不是类的实例。这意味着无论创建了多少个对象,静态变量都只有一份拷贝,所有对象都能访问它。这个特性...

    static静态局部变量的使用技巧

    由于静态局部变量的值在程序运行期间持续存在,如果程序中的多线程会同时访问同一个静态局部变量,就需要考虑线程安全的问题,以避免出现竞争条件导致的不一致现象。另外,在调试过程中,由于静态局部变量可能在程序...

    java程序初始化顺序

    - 静态变量的赋值:接着,静态变量会被赋予它们的初始值,这可以是声明时的值或者静态初始化块中的赋值。 3. **实例初始化阶段**: - 对象创建:当使用new关键字创建一个对象时,JVM会首先分配内存空间。 - 默认...

    JS脚本静态变量调用方法2

    这里的`flag`就是静态变量,它的初始值为`false`。由于它是静态的,所以这个变量不会随着text1.js脚本实例的创建或销毁而改变。它在整个应用的生命周期内保持其值,除非被显式地修改。 接下来,在text2.js中,你...

    JAVA技巧(Java多线程运行时,减少内存占用量).pdf

    - **合理设计对象的生命周期**:对于临时需要的大型对象,应当尽快使其成为垃圾回收的候选,例如,可以使用局部变量存储这些对象,在使用完毕后立即将它们的引用置为null,从而帮助垃圾回收器回收它们占用的内存。...

    java线程安全总结

    可见性是指当一个线程修改了共享变量的值,其他线程能够立即得知这个修改。为了保证可见性,JMM采取了以下措施: 1. **volatile关键字**:声明为volatile的变量,在被线程修改后会立刻刷新到主内存中,其他线程在...

    Java类变量和方法.doc

    Java 类变量和方法是编程语言Java的核心组成部分,它们定义了类的行为和属性。在这个文档中,我们将深入探讨这些概念。 首先,我们来看类的修饰符。在Java中,类可以被`public`、`abstract`或`final`修饰。`public`...

Global site tag (gtag.js) - Google Analytics