`

4线程两加两减

阅读更多
package com.thread;
/**
 * 设计4个线程,其中两个线程对j加1,另外两个对j减1
 * 
 *
 */
public class ThreadTest2 {
	
	//外部内成员变量j,共享于两个内部类
	private int j; 
	
	public static void main(String[] args) {
		/**
		 * 外部类使用内部类实例时,需先实例化外部类
		 * 因为内部类可以调用外部类的人员成员,
		 * 当没有外部类实例的时候也就没有这些成员的内存空间,
		 * 内部类在实例化的时候,调用外部类的成员就会出错,
		 * 所以需要使用外部类的实例 + 点 + new 的方式实例化一个新的内部类
		 */
		ThreadTest2 test2=new ThreadTest2();
		Inc inc=test2.new Inc();
		Dec dec=test2.new Dec();
		for (int i = 0; i < 2; i++) {
			new Thread(inc).start();
			new Thread(dec).start();
		}
	}
	
	
	/**
	 * 加1方法
	 */
	public synchronized void inc() {
		j++;
		System.out.println(Thread.currentThread().getName()+":inc()="+j);
	}
	
	/**
	 * 减1方法
	 */
	public synchronized void dec() {
		j--;
		System.out.println(Thread.currentThread().getName()+":dec()="+j);
	}
	
	
	
//加1的内部类
	class Inc implements Runnable{
		public void run() {
			for (int i = 0; i < 10; i++) {
				inc();
			}
		}
	}
	
//减1的内部类
	class Dec implements Runnable{
		public void run() {
			for (int i = 0; i < 10; i++) {
				dec();
			}
		}
	}
}

 

分享到:
评论

相关推荐

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

    Java 语言提供了多种方式来实现多线程编程,今天我们将讨论其中的两种实现方式,并使用四个线程来演示对变量 J 的加一和减一操作。 实现方式一:通过继承 Thread 类 在 Java 中,我们可以通过继承 Thread 类来创建...

    线程编程 四个线程...

    "多线程编程基础知识" 多线程编程是指在一个程序中同时执行多个线程的技术。每个线程都是一个独立的执行路径,拥有自己的程序计数器、寄存器和堆栈空间。多线程编程可以提高程序的执行效率和响应速度,但也增加了...

    java-多线程下载器(支持断点续传、线程加减)包含源码和可运行jar包 第二版

    4、任务下载过程中可以点击“线程+”或“线程-”即时增减线程; 5、选择任务,可以在任务信息栏中查看任务下载的信息; 6、对于正在下载和暂停的任务,可以再下载分块图示中查看文件的分块下载情况; (灰色为未...

    java-多线程下载器(支持断点续传、线程加减)包含源码和可运行jar包

    3、线程数由用户在新建任务时设定(若大于线程数20则默认为20); 4、下载过程中可以暂停,点击开始可以继续下载; 5、点击菜单栏“任务——退出程序”正常退出,可以保存当前未下载完成的任务,等待下次继续下载...

    易语言线程安全之原子锁与读写锁

    易语言提供了原子加减、原子比较并交换(CAS)等原子操作,确保了这些操作的线程安全性。 读写锁则是一种更高级的同步机制,它允许多个线程同时读取共享资源,但只允许一个线程进行写入。这种锁的特性提高了多线程...

    易语言多线程框架图

    信号量可以看作是一种计数器,通过P操作(等待,wait)和V操作(信号,signal)来进行加减。P操作会将信号量减1,如果结果小于0,则进程阻塞;V操作将信号量加1,如果有进程在该信号量上阻塞,则将其唤醒。 原子...

    Qt5.12.9多线程双缓冲串口类使用

    - 使用`QThread`时,尽量避免直接继承它,而是推荐使用worker对象加线程的模式,因为直接继承可能会导致内存泄漏。 - 关闭串口时,确保线程已经退出,否则可能会导致资源未释放。 - 对于不同平台,串口配置可能有所...

    linux多线程编程

    - **加减锁**:`pthread_mutex_lock`和`pthread_mutex_unlock`用于锁定和解锁。 - **锁属性**:可通过`pthread_mutexattr_init`和`pthread_mutexattr_set`设置属性,如类型、协议等。 - **注意事项**:避免死锁,...

    linux C 多线程编程典型实例

    `sem_t`类型代表一个信号量,`sem_init()`、`sem_wait()`和`sem_post()`用于初始化、获取(减计数)和释放(加计数)信号量。 5. **线程join**: 主线程可以通过`pthread_join()`等待子线程结束。这可以确保线程...

    ListView中实现加减,单行刷新,类似购物车功能实现

    - 商品数量可以通过加减按钮进行修改,这需要在每个ListView项中添加两个按钮(加、减)。 - 使用`OnClickListener`监听按钮点击事件,根据点击的是加还是减按钮,更新对应商品的数量。 3. **单行刷新**: - 当...

    高并发多线程面试专题及答案(上).pdf

    当线程尝试执行monitorenter时,它会检查对象的锁状态,如果未被锁定或当前线程已经持有该锁,则该线程可以继续执行,并将锁计数器加1;当执行monitorexit时,锁计数器减1。当计数器降至0时,锁被释放,其他等待的...

Global site tag (gtag.js) - Google Analytics