「java多线程改变变量」java 多线程变量
本篇文章给大家谈谈java多线程改变变量,以及java 多线程变量对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java 多线程,在主线程改变值,子线程接收不到
- 2、java 多线程 同时操作一个变量 高分悬赏
- 3、java中如果不加同步锁,多个线程对同一个变量修改,为什么会出现混乱
- 4、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 多线程变量的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-12,除非注明,否则均为
原创文章,转载请注明出处。