「java多线程改变变量」java 多线程变量

博主:adminadmin 2022-12-12 15:24:06 70

本篇文章给大家谈谈java多线程改变变量,以及java 多线程变量对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 多线程,在主线程改变值,子线程接收不到

子线程没有调起来,应该用out.start().

另外在子线程中isStarted的值没有看到是在哪里设的,应该是true。

如果isStarted是在外面设置的,请注意,应该在start以前设置

java 多线程 同时操作一个变量 高分悬赏

ArrayList不是线程安全的 所以 synchronized 必须有 这一点是关键,其他的都是浮云。还有 两个线程sleep一会更好 否则 这个跟死循环一样了 机器受不了啊!。

public class Test {

public static ListString list = new ArrayListString();

public static void main(String[] args) {

myThreadClass1 thread1 = new myThreadClass1();

myThreadClass2 thread2 = new myThreadClass2();

Thread t1 = new Thread(thread1);

Thread t2 = new Thread(thread2);

t1.start();

t2.start();

}

}

class myThreadClass1 implements Runnable {

public void run() {

while (true) {// 这就不要写1 ==1 了

synchronized (Test.class) {

System.out.println("add!!!!");

Test.list.add("123");

}

try {

Thread.sleep(100);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

class myThreadClass2 implements Runnable {

public void run() {

while (true) {

synchronized (Test.class) {

Iterator it = Test.list.iterator();

// 循环里remove会出冲突异常的

List list2 = new ArrayList();

while (it.hasNext()) {

Object obj = it.next();

System.out.println("remove:" + obj);

list2.add(obj);

}

// you can do anything with list2

// avoid java.util.ConcurrentModificationException

Test.list.clear();

}

try {

Thread.sleep(100);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

java中如果不加同步锁,多个线程对同一个变量修改,为什么会出现混乱

因为线程的完成时间问题,有可能线程A先完成,将变量S赋值为s了,然后线程B再完成,将S赋值为s1,那么S的值就为s1;但是,有可能线程B先完成,将S赋值为s1,然后线程A再完成,给S赋值s,那么S的值就是s了。

java 多线程成员变量问题?

关于成员变量和局部变量:

如果一个变量时成员变量,那么多个线程对同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的(也就是说一个线程对成员的改变会影响到另一个进程)

如果一个变量时局部变量,那么每个线程都会有一个该局部变量的拷贝,一个线程对对该局部变量的改变不会影响到其他线程。

关于java多线程改变变量和java 多线程变量的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-12,除非注明,否则均为首码项目网原创文章,转载请注明出处。