java 线程同步 急求解答

问题描述

在多线程编程中,有一个队列(用linkedList实现),里面会有大量数据,先需要多线程进行快速访问,该怎么实现?如列表{'a','b','c','d','e','f'}中,对每个元素都加上字符串‘q’,该怎么实现多线程顺序化访问并添加字符串?求实例简单代码

解决方案

你要是做作业帮不了你,要是项目实际想解决问题就这么做:ConcurrentLinkedDeque q = new ConcurrentLinkedDeque(你的LinkedList)然后这个q就随便多线程玩了。线程安全的。这个API需要Java7如果你不用Java7,换成ConcurrentLinkedQueue 也差不多。这个需要Java5你要是Java5都不用的话就自己同步了。
解决方案二:
你可以在所有的线程访问你的list之前让他们去竞争获取一个锁对象,谁拿了锁,谁才可以操作,这样的锁对象很多,你再Juc框架里面就能找到!
解决方案三:
感觉你的意思是多线程且分布式的处理这个队列呢,就是a线程处理一部分b线程处理另一部分。 而不是仅仅考虑线程安全问题呢。
解决方案四:
ConcurrentLinkedDeque 有一个改进就是使用了乐观锁.也就是只有真正发生冲突的时候,才需要想办法解决,而不是事先就锁住.这样自然就提高了并发度.至于怎么解决冲突,简单的说,就是发现冲突之后,重新把想做的事情在做一遍,不会每次做什么都和别的线程冲突吧,总有成功的时候.至于怎么检测冲突,简单点说,就是需要硬件(CPU)支持,详细情况可以参考下面的博文,不过是针对ConcurrentHashmap的.http://flyfoxs.iteye.com/admin/blogs/2100120
解决方案五:
1.5之后加入的那些ConcurrentXXXXX集合为什么说是线程安全的一直没怎么搞清楚,2个线程同时操作不用加锁也能保证数据正确?我觉得还是要在处理此集合的对方加入集合对象锁。不然还是不能保证数据完整性

时间: 2024-10-21 17:58:32

java 线程同步 急求解答的相关文章

线程停止-java如何停止当前正在运行的线程,新手求解答

问题描述 java如何停止当前正在运行的线程,新手求解答 最近想做一个无线数据监控服务端,用java做的,面板Jframe设置了一个Jpanel,我称这个为Jpanel 1 ,在Jpanel 1中我定义了一个多选JCheckbox,有四种监控方式可选:Bluetooth,Wifi,GPRS,Zigbee.还定义了一个JButton,分为开始ON,结束OFF,然后在JPanel 1中定义了JPanel 2,JPanel 2 中我定义了JScrollPane,scrollAndSetCursor用于

通过JNI接口调用c++接口时,c++接口中oracle数据库连接总是创建失败,急求解答

问题描述 通过JNI接口调用c++接口时,c++接口中oracle数据库连接总是创建失败,急求解答 封装了一个c++的接口类给java调用,接口中实现一些数据库查询操作, 接口在mfc下测试正常,通过java调用时数据库创建失败,ado,odbc,oci 的接口均试过了,都不成功,请问有人知道怎么解决吗? 解决方案 看下返回什么错误信息,然后才好判断,比如odbc驱动. 解决方案二: 连接字符串是封装在c++中没?如果是java传递的,那可能字符串传进来有问题

extends-自定义异常Throwable不能用,急求解答

问题描述 自定义异常Throwable不能用,急求解答 class ExceptionTest3//自定义异常练习 { public static void main(String[] args) { Test t=new Test(); try { int x=t.div(4,-1); System.out.println("x="+x); } catch(FushuException e) { System.out.println(e.toString()); System.out

Java 线程同步 synchronized

先来看一个不带线程同步的例子,这个例子很简单,只是让两个线程输出同样的内容,并不做其他的事, 所以,线程同步在这里体现的并不明显. import java.util.Date; public class ThreadTest extends Thread{ int pauseTime; String name; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method s

无法打开lib文件-vs2010无法打开libmysql.lib,非设置路径错误,急求解答,谢谢了

问题描述 vs2010无法打开libmysql.lib,非设置路径错误,急求解答,谢谢了 按网上的在c/c++和链接器中分别添加文件夹和lib文件后,运行程序总是无法打开libmysql.lib,这个lib文件是存在的,路径也没错,求帮忙 解决方案 你这个问题描述不够详细,是在运行的时候报错,还是在编译链接的时候报错. 如果是链接的时候报错,可能就是路径设置问题,如果是运行出错,那应该是需要dll而不是需要lib文件. 希望你能更详细的描述一下. 解决方案二: 如果存在,那么libmysql.l

bootstrap modal弹出框 关闭后会再弹出一次 急求解答

问题描述 bootstrap modal弹出框 关闭后会再弹出一次 急求解答 <!doctype html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>alert_modal弹出

代码分析-一道Java笔试题,求解答(关于类的加载与初始化)

问题描述 一道Java笔试题,求解答(关于类的加载与初始化) 自己查了一些资料,还是看不懂这个程序的输出结果,求各位详细解释初始化和执行过程,谢! public class Alibaba { public static int k = 0; public static Alibaba t1 = new Alibaba("t1"); public static Alibaba t2 = new Alibaba("t2"); public static int i =

曲线拟合-MATLAB问题急求解答 急求急求

问题描述 MATLAB问题急求解答 急求急求 对于曲线 y=|sinxsin0.2x|在区间[110]内以步长0.5取点,对原函数进行三次多项式曲线拟合,绘制对比图形.

求问,一道关于tomcat,java 的问题,求解答

问题描述 求问,一道关于tomcat,java 的问题,求解答 java.net.BindException: Address already in use: JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method) at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106) at java.net.Abstract