`

多线程 一个线程增加变量 一个线程打印变量值

阅读更多
一道面试题,多线程, 一个线程增加变量,另一个打印出变量值。我的做法:
public class MultiThreadsTest {   
       
    int size = 1000;   
    private int i= 0;   
    boolean printlable = false;   
    Object lock = new Object();   
  
    Thread addI = new Thread(new Runnable(){   
        public void run(){   
            for(int j=0; j<size; j++){   
                synchronized(lock){   
                    if(printlable){   
                        try {   
                            lock.wait();   
                        } catch (InterruptedException e) {   
                            e.printStackTrace();   
                        }   
                    }   
                }   
                synchronized(lock){   
                    i++;                       
                    printlable = true;   
                    lock.notify();   
                }   
                   
            }   
        }   
    });   
       
    Thread printI = new Thread(new Runnable(){   
        public void run(){   
            for(int j=0; j<size; j++){   
                synchronized(lock){   
                    if(!printlable){   
                        try {   
                            lock.wait();   
                        } catch (InterruptedException e) {   
                            e.printStackTrace();   
                        }   
                    }   
                }   
                synchronized(lock){   
                    System.out.println(i);   
                    printlable = false;   
                    lock.notify();   
                }   
                   
                   
            }              
        }   
    });
    
    public static void main(String[] args){
    	MultiThreadsTest mt = new MultiThreadsTest();
    	mt.addI.start();
    	mt.printI.start();
    }
}
分享到:
评论

相关推荐

    python 多线程共享全局变量的优劣

    当一个线程修改全局变量时,其他线程能够看到这一变化,这是多线程共享全局变量的基本机制。 **二、全局变量与`global`关键字** 在函数内部操作全局变量时,如果不使用`global`关键字,Python会默认创建一个局部...

    POSIX规范多线程代码示例

    - **条件变量**:用于线程间的协作,一个线程等待特定条件满足时,可以释放锁并进入等待状态,当条件满足时,其他线程可以唤醒它。 - **信号量**:计数型信号量可以用来控制对有限资源的访问,二值信号量类似于...

    java会话管理、多线程.docx

    - synchronized关键字:用于方法或代码块,确保同一时间只有一个线程能执行特定代码。 - volatile关键字:确保共享变量的值对所有线程可见,但不保证原子性。 - Lock接口和ReentrantLock类:提供比synchronized更细...

    j的多线程加减.zip

    `synchronized`可以修饰方法或代码块,当一个线程进入某个被`synchronized`保护的区域后,其他试图进入的线程将会被阻塞,直到当前线程执行完毕退出。 以下是可能的实现方案: ```java public class ThreadTest { ...

    Java 多线程的课程

    该方法打印线程名称以及一个随机整数(范围[0,99]),直到变量`i`达到50为止,每次循环增加2。 4. **main() 方法**: - 创建两个`NumberThread`实例,分别命名为"|jishu|"和"|oushu|",并设置它们的初始值分别为1和...

    Python 多线程共享变量的实现示例

    这样可以确保在任何时候只有一个线程能够修改共享变量,从而避免竞态条件。 例如,我们可以在上述的`add_func1`和`add_func2`中引入锁来确保线程安全: ```python import threading # 初始化全局变量和锁 g_num =...

    中软卓越Java模拟面试课堂:97-多线程共享数据.pptx

    在上述代码中,可以将`run()`方法或者包含对`x`的操作的代码块标记为`synchronized`,以确保每次只有一个线程能够访问和修改`x`。 ```java public synchronized void run() { for (int i = 0; i ; i++) { System....

    实验报告_Linux线程、互斥.pdf

    线程1和线程2分别在1秒和2秒的间隔内向两个可以容纳3个整数的缓冲区buf1和buf2写入10个数(1到10和-1到-10),并使用信号量sem1和sem2来确保每次只有一个线程能写入数据。线程3每3秒读取buf1和buf2中的数据,按顺序...

    python线程编程

    为了解决这一问题,可以使用锁(Lock)或递归锁(RLock)来确保在同一时刻只有一个线程可以访问资源。 ```python import threading my_lock = threading.RLock() class MyThread(threading.Thread): def run...

    第 3 次JAVA上机 报 告

    - `Counter`类有一个整型变量`counterValue`用于存储计数器的当前值。 - 定义了三个方法:`increment()`用于增加计数器的值,`decrement()`用于减少计数器的值,`reset()`用于将计数器重置为0。 - 在`Counter`类...

    操作系统课程设计_多线程_理发师问题

    这个问题来源于计算机科学领域的一个典型同步问题案例,旨在通过设计并实现一个多线程程序,模拟理发店内理发师与顾客之间的交互过程,进而解决线程间的同步问题。 #### 初始条件和技术要求 **初始条件:** - 操作...

    C++并发与多线程-运行时选择线程数量

    线程的数量由`hardware_threads`(即`std::thread::hardware_concurrency()`的返回值)和2的较小值决定,这是因为即使只有一个核心,至少也需要一个线程来执行主线程的工作。 每个`accumulate_block`实例在内部调用...

    一个简单的和死锁有关的程序

    `Test`类中,`add`方法首先增加`a`变量的值,然后调用`friend`对象的`delete`方法,之后打印出当前线程名称和"add"字符串。`delete`方法则减少`a`变量的值,并打印出当前线程名称和"delete"字符串。 关键在于`add`...

    深入学习python中的并发(一)---线程

    每个线程在打印后会释放自己的条件变量,并通知另一个线程可以开始执行。 第二个例子展示了如何实现一个支持并发的环形队列。环形队列是一个循环数组,用于存储元素且可以在两端进行插入和删除操作。在这个实现中,...

    C#调用Codesoft批量打印条码实例

    此外,为了优化性能,你可能需要考虑并发处理条码打印,例如使用多线程或异步操作。这样可以显著提高批量打印的效率,但同时也会增加代码的复杂性,需要合理管理和控制并发数量,防止打印机过载。 总结,C#调用...

    Python下线程之间的共享和释放示例

    例如,当一个线程修改了类变量(如 `Test.cache`),其他线程可能仍然持有对旧值的引用,导致内存无法完全释放。在示例中,`release_value` 方法尝试删除 `Test.cache` 中的键值对,但并不能保证其他线程不会在删除...

    python编程测试电脑开启最大线程数实例代码

    GIL使得在同一时刻只有一个线程能执行Python字节码,即使在多核处理器上也是如此,这限制了Python在多线程环境下的并发性能。因此,对于计算密集型任务,使用多进程(`multiprocessing`模块)可能比多线程更有效。 ...

    常量与变量

    常量的一个关键特性是它们是不可寻址的,这意味着我们无法获取它们在内存中的确切地址。尽管它们确实存储在内存中,但直接访问其地址是不允许的。因此,常量不能作为左值使用,即不能在赋值运算符的左边出现,如0 = ...

    信号量示例

    如果此时有线程在等待,那么会有一个线程被唤醒,继续其P操作。 4. 释放资源:在完成对资源的操作后,确保进行V操作,以释放资源并可能唤醒等待的线程。这很重要,因为未正确释放信号量可能导致死锁。 5. 避免死锁...

Global site tag (gtag.js) - Google Analytics