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 的加一和减一操作。 实现方式一:通过继承 Thread 类 在 Java 中,我们可以通过继承 Thread 类来创建...
"多线程编程基础知识" 多线程编程是指在一个程序中同时执行多个线程的技术。每个线程都是一个独立的执行路径,拥有自己的程序计数器、寄存器和堆栈空间。多线程编程可以提高程序的执行效率和响应速度,但也增加了...
4、任务下载过程中可以点击“线程+”或“线程-”即时增减线程; 5、选择任务,可以在任务信息栏中查看任务下载的信息; 6、对于正在下载和暂停的任务,可以再下载分块图示中查看文件的分块下载情况; (灰色为未...
3、线程数由用户在新建任务时设定(若大于线程数20则默认为20); 4、下载过程中可以暂停,点击开始可以继续下载; 5、点击菜单栏“任务——退出程序”正常退出,可以保存当前未下载完成的任务,等待下次继续下载...
易语言提供了原子加减、原子比较并交换(CAS)等原子操作,确保了这些操作的线程安全性。 读写锁则是一种更高级的同步机制,它允许多个线程同时读取共享资源,但只允许一个线程进行写入。这种锁的特性提高了多线程...
信号量可以看作是一种计数器,通过P操作(等待,wait)和V操作(信号,signal)来进行加减。P操作会将信号量减1,如果结果小于0,则进程阻塞;V操作将信号量加1,如果有进程在该信号量上阻塞,则将其唤醒。 原子...
- 使用`QThread`时,尽量避免直接继承它,而是推荐使用worker对象加线程的模式,因为直接继承可能会导致内存泄漏。 - 关闭串口时,确保线程已经退出,否则可能会导致资源未释放。 - 对于不同平台,串口配置可能有所...
- **加减锁**:`pthread_mutex_lock`和`pthread_mutex_unlock`用于锁定和解锁。 - **锁属性**:可通过`pthread_mutexattr_init`和`pthread_mutexattr_set`设置属性,如类型、协议等。 - **注意事项**:避免死锁,...
`sem_t`类型代表一个信号量,`sem_init()`、`sem_wait()`和`sem_post()`用于初始化、获取(减计数)和释放(加计数)信号量。 5. **线程join**: 主线程可以通过`pthread_join()`等待子线程结束。这可以确保线程...
- 商品数量可以通过加减按钮进行修改,这需要在每个ListView项中添加两个按钮(加、减)。 - 使用`OnClickListener`监听按钮点击事件,根据点击的是加还是减按钮,更新对应商品的数量。 3. **单行刷新**: - 当...
当线程尝试执行monitorenter时,它会检查对象的锁状态,如果未被锁定或当前线程已经持有该锁,则该线程可以继续执行,并将锁计数器加1;当执行monitorexit时,锁计数器减1。当计数器降至0时,锁被释放,其他等待的...