题目:
有一静态整形变量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();
}
}
分享到:
相关推荐
clicker.java 一个计数用的线程类 demoPri.java 调用上面这个类设置线程优先级示例 myThread.java 自己定义的一个Thread的子类 mutexThread.java 一个能管理临界区的线程类 demoMutex.java 使用上面这个类来...
静态变量和静态方法的意义,如何引用一个类的静态变量或者静态方法? 50.JAVA语言如何进行异常处理,关键字:thorws,throw,try,catch,finally 51.Object类(或者其子类)的finalize()方法在什么情况下被调用? 52....
在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...
例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望...
56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。 14 59、Java 编程,打印昨天的当前时刻。 15 60、java 和javasciprt 的区别。 15 61、什么时候用assert? 16 62、error和exception有什么...
6.2.1 在类中给每个变量一个初始值 147 6.2.2 定义自己的引用 147 6.2.3 使用点操作符的技巧 148 6.2.4 类的数组 149 6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车...
4. 新增一个静态的全局变量,用于记录所有线程的状态:static int GlobalVar=10000; 5. 声明并编写线程函数,注意只能有一个参数,且函数的返回值类型也是固定的;函数名可以自定义; DWORD WINAPI ThreadFun(LPVOID...
6.2.1 在类中给每个变量一个初始值 147 6.2.2 定义自己的引用 147 6.2.3 使用点操作符的技巧 148 6.2.4 类的数组 149 6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车...
一、互斥锁 互斥量从本质上说就是一把锁, 提供对共享资源的保护访问。 1. 初始化: 在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化: 对于静态分配的互斥量, 可以把它设置为...
"类的初始化过程 当创建一个对象时,对象的各个变量根据其类型被设置为相应的默认初始值,然后调用构造方法,而每次调用构造方法都是要执行三个阶段: 1.调用超类的构造方法; 2.由初始化语句对给变量进行初始化...
56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。 14 59、Java 编程,打印昨天的当前时刻。 15 60、java 和javasciprt 的区别。 15 61、什么时候用assert? 16 62、error和exception有什么...
对象成员变量在对象创建时会获得一个缺省的初始值. 5.Java数组随时可以改变大小. 6.InputStream和OutputStream读写的数据是8位的. 7.Java是强类型语言. 8.Java没有指针,引用不能等同于...
学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...
108 6.6 对象引用的使用 110 6.6.1 调用不存在的对象或成员变量 110 6.6.2 调用对象为null值的引用 111 6.6.3 对象引用间的比较 113 6.7 this 113 6.8 要活用JDK已有的类 114 6.8.1 Date类 114 6.8.2 Integer类 116 ...
一个Javaservlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除。Servlet的生命周期被javax.servlet.Servlet这个接口所定义。 所有的...
实例014 使当前项目依赖另一个项目 21 1.3 界面设计器 22 实例015 安装界面设计器 22 实例016 设计Windows系统的运行对话框 界面 23 实例017 设计计算器程序界面 26 实例018 设计关于进销存管理系统的界面 27 第2章 ...
何时栈上创建,传递变量时候的按值传 递 Comparable 接口,Comparator类,用来做比较,主要是用于集合中,排序,插入等等 类初始化,变量初始化,静态变量,静态区,常量区等等 继承多态需要知道的有super, this, ...