有问题就有答案
Q1:Java的List如何实现线程安全?
ArrayList如何实现线程安全一、1、使用synchronized关键字;2.使用Collections.synchronizedList();使用方法如下:假如你创建的代码如下:List<Map> data=new ArrayList<Map>();那么为了解决这个线程安全问题你可以这么使用Collections.synchronizedList(),如:List<Map> data=Collections.synchronizedList(new ArrayList<Map>());其他的都没变,使用的方法也几乎与ArrayList一样,大家可以参考下api文档;额外说下 ArrayList与LinkedList;这两个都是接口List下的一个实现,用法都一样,但用的场所的有点不同,ArrayList适合于进行大量的随机访问的情况下使用,LinkedList适合在表中进行插入、删除时使用,二者都是非线程安全,解决方法同上(为了避免线程安全,以上采取的方法,特别是第二种,其实是非常损耗性能的)。二、定义一个类 MyLinkedList extends LinkedList 实现同步LinkedList.addFirst(); 和 removeLast();方法! MyLinkedList list = new MyLinkedList (); List listProxy = Collections.synchronizedList(list); 用普通方法时用 listprocxy 的方法, ..................... 或者MyLinkedList 全部实现同步。
Q2:java arryList 线程安全问题
在Collections工具类中有这样的方法:static List synchronizedList(List list) 返回线程安全的集合还有这种的set maP的你看看API文档
Q3:java 如何实现一个线程安全的队列
有两个线程:导入Java . util . *;公共类thread _ List _ operation {//假设有这样一个队列静态List List=new LinkedList();公共静态void main(String[]args){ Thread t;t=新线程(新T1());t . start();t=new Thread(新T2());t . start();}}//thread T1用于向列表中添加新元素,classt1实现了runnable { void getelement(object o){ thread _ list _ operation . list . add(o);系统。out.println(线程。currentthread()。getname()“向队列添加一个元素”);} @ override public void run(){ for(int I=0;i 10i ) {getElemt(新整数(1));}}}//thread T2用于向列表中添加新元素,classt2实现可运行的{ void getelement(object o){ thread _ list _ operation . list . add(o);系统。out.println(线程。currentthread()。getname()“向队列添加一个元素”);} @ override public void run(){ for(int I=0;i 10i ) {getElemt(新整数(1));}}}//结果(无序)Thread-0向队列中添加了一个元素Thread-1向队列中添加了一个元素Thread-0向队列中添加了一个元素Thread-1向队列中添加了一个元素Thread-1向队列中添加了一个元素Thread-1向队列中添加了一个元素。Hread-1向队列中添加元素Thread-1向队列中添加元素Thread-1向队列中添加元素Thread-0向队列中添加元素Thread-0向队列中添加元素Thread-0向队列中添加元素Thread-0向队列中添加元素。向队列添加元素线程0向队列添加元素线程0向队列添加元素。
Q4:java list是不是线程安全的
直接用Vector就可以了,它是线程安全的。ArrayList list=new ArrayList();你需要锁定,这涉及到同步。可以参考网上购票的例子。
Q5:List是线程安全的吗?若不是安全,怎么变成安全的
你说的是java还是C?在java中解决这个问题通常有两种方法:使用synchronized关键字;二:使用collections . synchronized list();假设您创建了以下代码:List data=new ArrayList();要解决这个线程安全问题,可以使用Collections.synchronizedList()如下:list data=collections . synchronized list(new ArrayList());只要换个新关键词,其他都没变。您可以参考api文档了解使用方法。c语言中的list有两种:一种是自己手工实现的List的数据结构,另一种是STL封装的。如果是手工做的,发源代码,我帮你看看怎么优化。如果使用stl,那么就不能指望STL给你线程支持,因为它要效率。应注意:1。多线程读取是安全的。多线程可以同时读取容器的内容。你只会读,不会写。2.对不同容器的多次写入是安全的。多个线程可以同时编写不同的容器。请注意,它们是不同的容器。因此,您应该为容器编写一个模板类来实现锁定(构造时锁定,解构时释放),然后在访问容器时定义这个类的临时变量。临时变量可以确保如果抛出异常,临时对象将被销毁,从而释放锁。
Q6:Java中的类如何保证线程安全
在java中,线程安全的解决方案或进程:1。如果一个对象是不可变的,它是线程安全的,比如:String,可以放心使用。2.如果对象是线程安全的,请放心使用它。3.条件线程安全一般是Vector和Hashtable的线程安全,但是对于一些特殊情况,需要通过额外的同步来保证线程安全。4.使用synchronized关键字。