Java编程多个线程如何访问同一个共享资源

 我来答
草原上之狼
高粉答主

2018-06-07 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.9万
采纳率:93%
帮助的人:3947万
展开全部
如果该方法不涉及写公共的资源比如一个静态的变量或者写文件,修改某个数据库的值的时候没有影响
比如你这个类里的方法只是对输入的参数做一个计算然后返回计算的值就没有影响。
但是如果是修改公共的资源比如修改数据库中存储的一个value则有可能出现问题,如:

public void writeDb(String key, String value) {
collectiondb();
write(key, value);
closeDbCollection();
}

因为Java的线程运行顺序是不一定的,可以第一个线程运行完连接数据库到后挂起了,这时候第二个线程开始运行,如果你的collectiondb()处理使用的是类中的一个实例变量Connection conn来保存数据库的连接,当第二个线程运行完毕以后conn也被关闭了,第一个线程继续执行write函数写数据库值的时候就会抛出异常。
这是一个例子,还有其他可能产生脏数据的问题
多线程如果使用公共资源的话最好在方法上声明synchronized关键字让其同步
F_isGod
2019-04-11
知道答主
回答量:1
采纳率:0%
帮助的人:747
展开全部

两种方式:

  1. 在线程类中数据用static修饰,并对run中加锁

  2. 在外界创建数据,并传递给线程类eg:在main方法中创建数据,然后在创建线程实例时传递数据来构造,并重写线程类构造来获取main中创建的(同一份)数据

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式