请各位大神们进来看看,关于同步锁的问题。

问题描述

packagej;publicclassTest{publicstaticvoidmain(String[]arguments){SyncStackss=newSyncStack();producersp=newproducers(ss);consumersc=newconsumers(ss);Threadt1=newThread(p);Threadt2=newThread(c);t1.start();t2.start();}}classWotou{intid;publicWotou(intid){this.id=id;}publicStringtoString(){return"Wotou:"+id;}}classSyncStack{intindex=0;Wotouwt;Wotou[]attWotou=newWotou[6];publicvoidpush(Wotouwt){synchronized()***************{if(index==attWotou.length){try{this.wait();}catch(Exceptione){e.printStackTrace();}}this.notify();attWotou[index]=wt;index++;}}publicWotoupop(){synchronized()****************{if(index==0){try{this.wait();}catch(Exceptione){e.printStackTrace();}}this.notify();index--;returnattWotou[index];}}}classproducersimplementsRunnable{Wotouwt;SyncStackss;publicproducers(SyncStackss){this.ss=ss;}publicvoidrun(){for(inti=0;i<20;i++){Wotouwt=newWotou(i);ss.push(wt);System.out.println("生产了:"+wt);try{Thread.sleep(1000);}catch(Exceptione){e.printStackTrace();}}}}classconsumersimplementsRunnable{Wotouwt;SyncStackss;publicconsumers(SyncStackss){this.ss=ss;}publicvoidrun(){for(inti=0;i<20;i++){Wotouwt=ss.pop();System.out.println("消费了:"+wt);try{Thread.sleep(1000);}catch(Exceptione){e.printStackTrace();}}}}我想请问一下,在我两行*****号的那个地方synchronized()里面应该添什么啊?如果添this,但是他俩分别属于不同的函数啊,对象不一样啊,不是同一把锁啊,

解决方案

解决方案二:
没仔细看代码细节,如果楼主是要达到同步目的话,那么申请一个公共对象如:Objectobj=newObject();然后两个synchronized(obj)就可以了。PS:下次把代码格式化会更有可读性哦
解决方案三:
synchronzed锁住的是当前对象,防止其他线程访问当前对象(阻止重执行synchonred部分的代码),那个地方应该用this/
解决方案四:
this也好别的也好,都是一个关卡而已。最好是使用reentrantlock清除明白

时间: 2024-09-04 00:32:02

请各位大神们进来看看,关于同步锁的问题。的相关文章

格式-请大神们进来看看这种ini文件是怎么回事

问题描述 请大神们进来看看这种ini文件是怎么回事 这是迅雷的config.ini文件,但跟一般ini文件格式完全不同啊,新手经验不足,求大神指教这是怎么回事?另求如何读取修改这类文件的节点键值? falsefalsefalse 114 11112 解决方案 人家只是借用了ini文件名后缀,看这个格式,是个标准的XML,用代码来操作这个XML文档就行了,XML文档的读写自己百度下吧 解决方案二: 这.. 迅雷人家就是这么定义config的, 你可以试试修改下启动迅雷会有什么变化 解决方案三: i

android静默安装问题,求大神们进来指点。

问题描述 android静默安装问题,求大神们进来指点. 最新公司需求写一个静默安装的功能,本人在网上找了很多代码,也都在root过的手机里面实验过.但是没有用现在贴上代码Process process = Runtime.getRuntime().exec(""sh""); DataOutputStream dos = new DataOutputStream(process.getOutputStream()); cmd = String.valueOf(cmd

ios-关于IOS开发中SQLlite的问题,大神们进来看看

问题描述 关于IOS开发中SQLlite的问题,大神们进来看看 我用循环把plist文件里面的字典数据转存到SQLlite里,转存后查看的时候发现SQLlite里面的数据比原来plist里的少了十几行数据,数据量太多没法看出少了哪些数据,请问这个是什么原因,或者说往SQLlite里面存数据的时候为什么会出现数据丢失?这是一个问题. 还有就是我数据的源文件是来自一个EXCEL表格的,有没办法可以直接从EXCEL里面读取数据存储到SQLlite里? 有遇到这些情况的大神请和我分享下你的经验,谢谢 解

线程-java调用sqlplus下载数据库文件到本地后,如果用java关闭此进程,大神戳进来

问题描述 java调用sqlplus下载数据库文件到本地后,如果用java关闭此进程,大神戳进来 1.用java调用sqlplus,将指定的存储过程下载到本地作为文本文件2.在java读取此本地文件做处理,处理后写1个新的文本文件在本地我将上面2个步骤用2个进程thread1,thread2因为步骤2必须等步骤1结束才能执行,所以我调用thread1.start()thread1.join()以及thread2.start().但是运行结果是每次都只执行出了步骤1,步骤2执行不出来.考虑是否在步

1排序-c#中的字母冒泡排序 请各位大神指导

问题描述 c#中的字母冒泡排序 请各位大神指导 如何完成字母的冒泡排序 例如 ab abc等相比 那个在先 该怎么写 请各位大神指导下 谢谢

dorado 7 请各位大神帮帮看看这个怎么修改

问题描述 dorado 7 请各位大神帮帮看看这个怎么修改 <Control type="DataTable" showIndicator="false" highlightSelection="false" showHScrollBar="false" showFooter="false" dataset="dsEvecHotelAndMeal" showHeader="

app-android demo 运行的时候遇到如下问题 请各位大神赐教!

问题描述 android demo 运行的时候遇到如下问题 请各位大神赐教! Error:Execution failed for task ':app:mergeDebugResources'. Some file crunching failed, see logs for details 导致R文件报错 解决方案 看看你引入的资源,是否违反规则.

class-烦请各位大神给小妹瞅瞅

问题描述 烦请各位大神给小妹瞅瞅 #include using namespace std; class xx { public: xx() { quantity=0; price=0; } void total(); static float average(); static void display(); private: int quantity; float price; static double discount; static float sum; static int n; }

c#窗体-c#两个窗口之间传值,虽然简单,但我仍不会,请各位大神帮忙

问题描述 c#两个窗口之间传值,虽然简单,但我仍不会,请各位大神帮忙 在一个窗口的button按钮中点击,另一个窗口的checkbox被选中,该咋写 解决方案 http://bbs.csdn.net/topics/360140208 解决方案二: 另一个窗体添加一个属性 public bool IsSelected { get { return checkBox1.Checked; } set { checkBox1.Checked = value; } } 主窗体 (Application.O