kwrl.net
当前位置:首页 >> jAvA多线程访问同一个数组,存在并发问题吗,每个... >>

jAvA多线程访问同一个数组,存在并发问题吗,每个...

集合类中,Arraylist和LinkedList是线程不安全的,vector是线程安全的,但是vector效率低下(因为线程安全导致的效率低下)。如果操作数组,理论上是不安全的,会出现数据不同步的情况,建议使用synchronized。

public class T{ int[] input={100,5,98,77,60,88,36}; int[] output={0,0,0,0,0,0,0}; int curr = 0; public synchronized int getCurr() { if( curr== input.length ) return -1; return curr++; } static class Worker extends Thread { T t;...

例如:一个线程正准备往进去写数据,突然切到另一个线程它先写了进入,在切回来这个线程并不知道这个位置已经写入了数据,所以它还是会傻傻的写入数据,这样另一个线程的数据就被覆盖了。如果是一边添加 ,一边遍历的话程序会产生ConcurrentModi...

比如说,两个线程操作同一个ArrayList变量,那么一个线程这一时刻读的数据可能在下一刻要改变。 一般在类似于下面的情景下考虑线程安全的问题: ArrayList products=new ArrayList (); products用来存放生产出来的产品。 现在假设:有3个消费者...

访问一个类中的数组或修改数组,只需写一个public的方法method()。 关键点就是传递的数组 class B{String[] aa = new String[1024];//返回B类中的数组aapublic void getArray(){return aa;}//修复B类听数组public void updateArray(String[] bb)...

哦,那是因为你在admin中给 Student[]赋的值都是 指向同一个地址的Student类,stuAdmin只被实例化了一次 。 arr[0]==arr[1] 是true的 你应该 Student stuAdmin=null; 在每次调用admin.create(Student[]) 时每次实例化一次 stuAdmin=new Student()...

final修饰的引用不可以指向其他的内存,但是其值是可以变得。这句话该怎么理解呢,比如: final List l = new ArrayList();l = new ArrayList();//错误,不可以指向别的内存。l.get(0) = "asdf";//正确,因为没有改变其指向那么线程安全该怎么理...

数组的成员是可以同步访问的,只要你自己控制好不要两个线程同时操作同一个成员就可以。有个特例是:如果你能保证始终只有一个线程去修改成员值,而所有其他访问该成员的线程都是读值,这种情况下也是可以不用同步的。否则你就必须将所有对数组...

import java.util.*;public class AryTest {public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("输入list1:"); String[] ss1 = input.nextLine().trim().split("\\s+");// 用空格切分读取的...

你是是什么形式掉用那 ? 要是变改边掉 加锁 然后把你的变量变成 static类型 要是 子线程结束之后 主线程掉 就把你的数据封装起来 然后使用即可。 可以放进hashMap进行封装。

网站首页 | 网站地图
All rights reserved Powered by www.kwrl.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com