加一线程与减一线程共同操作一个数

注意:不能synchronized(j) 因为j是基本数据类型,不是对象!

/**
 * 加一线程与减一线程共同操作一个数 两个问题: 1、线程同步--synchronized 2、线程之间如何共享同一个j变量--内部类
 *
 */
public class test {
    int j = 1;

    public synchronized void inc() {
        j++;
        System.out.println(Thread.currentThread().getName() + "-inc:" + j);
    }

    public synchronized void dec() {
        j--;
        System.out.println(Thread.currentThread().getName() + "-dec:" + j);
    }

    class P implements Runnable {
        public void run() {
            inc();
        }
    }

    class C implements Runnable {
        public void run() {
            dec();
        }
    }

    public static void main(String[] args) {
        test t = new test();
        P p = t.new P();
        C c = t.new C();
        for (int i = 0; i < 2; i++) {
            Thread pp = new Thread(p);
            pp.start();

            Thread cc = new Thread(c);
            cc.start();
        }

    }
}

加一线程与减一线程共同操作一个数,布布扣,bubuko.com

时间: 2024-10-11 23:08:55

加一线程与减一线程共同操作一个数的相关文章

Android-优化UI性能(1)-减少主线程的阻塞时间

Android-优化UI性能(1)-减少主线程的阻塞时间 一 减少主线程的阻塞时间 Android已经提供了AsyncTask实现从主线程生成新的异步任务的方法. 定义并实现下面的类即可(方法由系统自动调用): public class DownloadFilesAsyncTask extends AsyncTask<URL,integer,Long> { /* (non-Javadoc) * 后台执行函数 * @see android.os.AsyncTask#doInBackground(

线程与信号,线程与锁

#include<stdio.h> #include<apue.h> #include<pthread.h> pthread_mutex_t number_mutex = PTHREAD_MUTEX_INITIALIZER; int globvar = 0 ; void *write_p(void *arg){ while(1){ pthread_mutex_lock(&number_mutex); globvar++; printf("the wri

[转]java线程安全、jstack\线程dump、内存查看分析总结

http://jameswxx.iteye.com/blog/808546 java线程安全总结二 http://jameswxx.iteye.com/blog/1041173 jstack和线程dump分析 http://jameswxx.iteye.com/blog/731763 java内存查看与分析 http://jameswxx.iteye.com/blog/402422 java堆栈 最近想将java基础的一些东西都整理整理,写下来,这是对知识的总结,也是一种乐趣.已经拟好了提纲,大

线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁

线程(from threading import Thread):CPU调度的最小单位 线程的两种创建方式:方式一: 1 from threading import Thread 2 def f1(i): 3 print(i) 4 if __name__ == '__main__': 5 for i in range(10): 6 t = Thread(target=f1,args=(i,)) 7 t.start() 8 print('主线程') 方式二: 1 from threading im

线程间通信和线程互斥

线程间通信 1> 线程间通信分为两种 主线程进入子线程(前面的方法都可以) 子线程回到主线程 2> 返回主线程 3> 代码 这个案例的思路是:当我触摸屏幕时,会在子线程加载图片,然后在主线程刷新UI界面 视图布局我就不写了,大家自己来吧,线程间通信代码如下: #pragma mark - 添加响应方法触发创建子线程并加载数据 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

线程系列08,实现线程锁的各种方式,使用lock,Montor,Mutex,Semaphore以及线程死锁

当涉及到多线程共享数据,需要数据同步的时候,就可以考虑使用线程锁了.本篇体验线程锁的各种用法以及线程死锁.主要包括: ※ 使用lock处理数据同步※ 使用Monitor.Enter和Monitor.Exit处理数据同步※ 使用Mutex处理进程间数据同步※ 使用Semaphore处理数据同步※ 线程死锁 □ 使用lock处理数据同步 假设有一个类,主要用来计算该类2个字段的商,在计算商的方法之内让被除数自减,即被除数有可能为零.使用lock语句块保证每次只有一个线程进入该方法. class Th

Java之线程,常用方法,线程同步,死锁

1, 线程的概念 进程与线程 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小.(线程是cpu调度的最小单位) 切换而不是同步 一个程序中的方法有几条执行路径, 就有几个线程 Java中线程的生命周期 Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t =

线程的状态与线程安全

线程也有生命周期,线程从创建到死亡会经历如下的过程: 创建(new)-->待运行(runnable)-->运行(running)-->死亡(dead) |_____阻塞______|(阻塞过程包含waiting.sleeping.yeild.join.blocked) 下面将一一讲诉具体的每个过程.前面讲到怎样创建一个线程,但创建完一个线程后此线程并不会马上进入到运行状态,而是要等分配到一定的资源(比如内存空 间)后变为runnable,当调用start()方法后,线程便开始运行.如果此

Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。

今天为在Windows下建立PHP开发环境,在考虑下载何种PHP版本时,遭遇一些让我困惑的情况,为了解决这些困惑,不出意料地牵扯出更多让我困惑的问题. 为了将这些困惑一网打尽,我花了一下午加一晚上的时间查阅了大量资料,并做了一番实验后,终于把这些困惑全都搞得清清楚楚了. 说实话,之所以花了这么多时间,很大程度上是由于网上的资料几乎全都是支离破碎.以讹传讹的.既然我已经搞懂了,就花时间整理出来,即方便自己看,也便于大家阅读.相信通过这篇文章,可以解答很多在Windows下搭建PHP开发环境的朋友的