`

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

阅读更多
一道面试题,多线程, 一个线程增加变量,另一个打印出变量值。我的做法:
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();
    }
}
分享到:
评论

相关推荐

    Qt 多线程访问同一个变量

    标题"Qt 多线程访问同一个变量"涉及到的是如何在多线程环境下确保对共享资源(此处为一个全局变量)的安全访问。描述中提到了使用互斥锁来解决这个问题,并通过创建两个线程ThreadA和ThreadB来演示这一过程。 首先...

    C#多线程互斥实例 多线程获取同一变量

    2. **共享资源**:在多线程环境中,多个线程可能需要访问同一个数据或对象,这就形成了共享资源。 3. **竞态条件**:当两个或多个线程同时访问并修改共享资源时,如果没有适当的同步措施,可能导致数据的不一致性,...

    多线程线程变量赋值

    总的来说,“多线程线程变量赋值”是一个关于如何在多线程环境中管理线程私有数据的问题。通过`ThreadLocal`,我们可以创建和操作线程特有的变量,避免了数据同步的复杂性,但在使用过程中需要注意内存管理和线程...

    采用全局变量方式实现多线程的通信

    这种特性使得全局变量成为多线程环境中传递信息的一种可能手段,因为所有线程都可以直接读写同一个变量。 在多线程通信中,我们通常会遇到两个主要问题:数据竞争和死锁。数据竞争是当两个或更多线程同时修改同一...

    C语言多线程中变量累加问题的分析

    C语言多线程中变量累加问题的分析 在C语言中,多线程编程是非常重要的概念之一。多线程编程可以提高程序的执行...变量累加问题是多线程编程中的一个非常重要的问题,我们需要认真对待它,以确保程序的正确性和可靠性。

    java多线程_java多线程下变量共享_

    在多线程环境中,变量共享是一个常见的需求,但也是引发问题的关键点。本篇文章将深入探讨Java多线程下变量共享的问题以及解决策略。 在Java中,线程共享变量可以通过两种方式实现:静态成员变量和实例成员变量。...

    CVI 线程锁、线程安全变量实例

    本实例将深入探讨如何在LabWindows/CVI中有效地使用线程锁和线程安全变量来实现多线程程序设计。 首先,我们来看线程锁。线程锁,也称为互斥锁,是一种同步机制,用于确保同一时间只有一个线程可以访问特定的资源或...

    多线程同时操作全局变量的出错演示

    在多线程环境中,如果一个全局变量被多个线程同时读写,由于处理器调度的不确定性,可能导致数据不一致性和错误的结果。这种现象通常称为竞态条件,是多线程编程中的一个常见问题。 多线程是指一个进程中存在两个或...

    多线程调试打印日志类

    "多线程调试打印日志类"是一个专门设计用于在多线程环境中记录和打印日志的C++类。此类实现了一个单例模式,确保在整个应用程序中只有一个实例存在,从而避免了资源竞争和日志混乱的问题。 首先,单例模式是一种...

    c++通过结构体(struct)全局变量在多线程中传递参数

    我们可以通过定义一个结构体来存储需要在多线程间共享的数据,然后通过指针在各个线程中传递这个结构体。以下是一个简单的例子: ```cpp #include #include #include struct SharedData { int value; std::...

    线程编程 四个线程...

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

    文件打印问题 (c++多线程实现)

    总的来说,“文件打印问题”的多线程实现是理解和掌握C++并发编程的一个好例子。它涉及到线程同步、互斥访问和资源管理,这些都是现代软件开发中的核心技能。通过学习和实践,开发者能够编写出更高效、更可靠的并发...

    CVI 04.多线程数据保护(安全变量

    多线程是指在一个程序中同时执行多个独立的线程,每个线程都有自己的执行路径和资源。在多核或多处理器系统中,多线程可以显著提高程序的效率,但同时也引入了数据同步和保护的问题。 安全变量是用于在多线程环境中...

    使用三种VC的多线程同步方法编写一个多线程的程序

    1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。

    .NET多线程实例

    在多线程环境中,事件处理通常在引发事件的线程上运行,因此,如果一个线程修改了UI控件的状态,而另一个线程尝试处理相关事件,可能会导致线程不安全。使用适当的同步机制可以解决这个问题。 "资源管理器"可能涉及...

    java 多线程 加减变量

    java 多线程 加减变量

    JAVA多线程并发操作全局变量

    NULL 博文链接:https://toknowme.iteye.com/blog/2212529

    易语言多线程传递文本参数两种方法

    1. **定义全局变量**:在程序开始时,声明一个全局变量(可以是字符串类型)用于存储参数。 ```易语言 .全局变量, 文本型, 全局参数 ``` 2. **设置全局变量**:在主线程中,将要传递的文本赋值给这个全局变量。 ...

Global site tag (gtag.js) - Google Analytics