关于java多线程锁的问题 如何增加变量更新锁 主线程初始化的时候我会一个 static map 进行付值 然后启动多个子线程会 读取 static map 当我主线程去更新 这个static map 的时候! 我想加一个更新锁,也就是在我主线程第二次更新 static map 中 我不希望其他子线程去读取 (加一个锁),想问一下具体怎么实现!谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 加一个控制..当这个文件进度满时其他线程start 或者时间控制. 加一个控制..当这个文件进度满时其他线程start 或者时间控制. 关键是 我子线程 是不停的会去取 从static map 里面的值 所以不会取重新启动子线程 嘿嘿 我给一个思路private static Boolean isUpdate = false;public Map getMap(){ while(isUpdate){ try{ Thread.sleep(1000); // 等待1秒,时间你自己设 }catch(Exception ex){} } return map;}public void updateMap(Map mapNew){ isUpdate = true; // 加上标志 ....// 你的更新操作 isUpdate = false; // 去掉标志} 提示一句,访问属性最好通过 get/set 方法,方面你进行控制,如果你采用manager.map 直接读取的,你就得修改这种方法了,同时把管理类的map 设置为 private 我直接是 是 public static Map zoneIDMap = new TreeMap(); //营销区域id 对应的小区celljava 能不能 更新zoneIDMap 的时候 加一个锁来管理楼上说的那种管理机制可能会有问题! 我是多线程进行并发的 public class MainThread { public long data=0; public static boolean flag= true; public MainThread() { SubThread sub1=new SubThread("Sub1",this); sub1.start(); SubThread sub2=new SubThread("Sub2",this); sub2.start(); SubThread sub3=new SubThread("Sub3",this); sub3.start(); } public void startSubThread() { try { while (true) { flag = false; data = data + 1; flag = true; } } catch(java.lang.Exception e) { e.printStackTrace(); } } public static void main(String arg[]) { MainThread main = new MainThread(); main.startSubThread(); }}class SubThread extends java.lang.Thread{ String classname =""; MainThread main=null; public SubThread(String classname,MainThread main) { this.classname = classname; this.main= main; } public void run() { try { while(true) { if(main.flag) System.out.println(classname +" data:"+main.data); } } catch(java.lang.Exception e) { e.printStackTrace(); } }} java 能不能 更新zoneIDMap 的时候 加一个锁来管理 ??你的访问方式决定了那些线程不会采用什么锁的,因为他们直接读取。我的方法没有问题,在没有更新操作的时候,各线程能很好的工作。while(isUpdate){ // 如果不是更新,会直接返回的! 推荐 java程序如何在内存中运行的 视频和书籍 新手求高人指教下,一个数据库连接的测试 菜鸟问个问题!!! “找不到符号”问题 自己做了个聊天工具,如何导出jar, 客户端和服务器一起导出? IO输出的行号问题!!!望大家帮忙解决! jdk 安装 设置问题 谢谢 关于初始化对象数组 请告知何处有关于Java类库的图书下载(PDF版)???谢谢!!!!!!! 请问:java中的内置类是何意思? 请问什么是JRE jdbc 连接数据库问题 报错:No suitable driver
关键是 我子线程 是不停的会去取 从static map 里面的值 所以不会取重新启动子线程 嘿嘿
while(isUpdate){
try{
Thread.sleep(1000); // 等待1秒,时间你自己设
}catch(Exception ex){}
}
return map;
}public void updateMap(Map mapNew){
isUpdate = true; // 加上标志
....// 你的更新操作
isUpdate = false; // 去掉标志
}
manager.map 直接读取的,你就得修改这种方法了,同时把管理类的map 设置为 private
public static Map zoneIDMap = new TreeMap(); //营销区域id 对应的小区celljava 能不能 更新zoneIDMap 的时候 加一个锁来管理
楼上说的那种管理机制可能会有问题! 我是多线程进行并发的
{
public long data=0;
public static boolean flag= true;
public MainThread()
{
SubThread sub1=new SubThread("Sub1",this);
sub1.start();
SubThread sub2=new SubThread("Sub2",this);
sub2.start();
SubThread sub3=new SubThread("Sub3",this);
sub3.start();
}
public void startSubThread()
{
try
{
while (true)
{
flag = false;
data = data + 1;
flag = true;
}
}
catch(java.lang.Exception e)
{
e.printStackTrace();
}
}
public static void main(String arg[])
{
MainThread main = new MainThread();
main.startSubThread();
}
}
class SubThread extends java.lang.Thread
{
String classname ="";
MainThread main=null;
public SubThread(String classname,MainThread main)
{
this.classname = classname;
this.main= main;
}
public void run()
{
try
{
while(true)
{
if(main.flag)
System.out.println(classname +" data:"+main.data);
}
}
catch(java.lang.Exception e)
{
e.printStackTrace();
}
}
}
while(isUpdate){ // 如果不是更新,会直接返回的!