java线程睡眠分析,java线程睡眠有关问题
java線程睡眠問題
這是我的代碼
package?org.com.JframeDemo;
public?class?ControlClass?{
private?int?readCount;?//?需要讀的讀者
private?int?writeCount;?//?需要寫的寫者
private?boolean?cRead;?//?讀者的狀態(tài)
private?boolean?cWrite;?//?學(xué)者的狀態(tài)
public?static?int?a;
public?ControlClass()?{?//?初始化數(shù)據(jù)
readCount?=?0;
writeCount?=?0;
cRead?=?false;
cWrite?=?false;
}
public?static?void?sleeptime()?{?//?睡眠時間
int?sleepTime?=?(int)?(Math.random());
try?{
Thread.sleep(sleepTime?*?10000);
}?catch?(Exception?e)?{
//?TODO:?handle?exception
e.printStackTrace();
}
}
public?synchronized?void?startRead()?{?//?讀者開始讀取
if?(cRead?==?false)?{
while?(writeCount?>?0)?{?//?寫者優(yōu)先
try?{
a=0;
wait();
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
System.out.println(e.toString());
e.printStackTrace();
}
}
}
readCount++;
if?(readCount?==?1)?{
cRead?=?true;?//?返回有讀者正在讀
}
}
public?synchronized?void?endRead()?{?//?讀者結(jié)束讀取
--readCount;
if?(readCount?==?0)?{
cRead?=?false;
}
notifyAll();?//?釋放空間
}
public?synchronized?void?startWrite()?{?//?寫者開始寫
writeCount++;
if?(cRead?==?true?||?cWrite?==?true)?{
a=1;
try?{
wait();
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
System.out.println(e.toString());
e.printStackTrace();
}
}
cWrite?=?true;
}
public?synchronized?void?endWrite()?{
writeCount++;
cWrite?=?false;
notifyAll();
}
}
package?org.com.JframeDemo;
import?java.text.SimpleDateFormat;
import?java.util.Date;
import?javax.swing.JTextArea;
public?class?Reader?implements?Runnable?{
private?ControlClass?controlClass;
private?JTextArea?t;
private?int?reader;
public?static?String?str?=?"",time1,time2;
public?Reader(int?reader,?JTextArea?t,?ControlClass?controlClass)?{
this.reader?=?reader;
this.t?=?t;
this.controlClass?=?controlClass;
}
@Override
public?void?run()?{
//?TODO?Auto-generated?method?stub
while?(true)?{
final?SimpleDateFormat?format?=?new?SimpleDateFormat("HH:mm:ss");
time1?=?format.format(new?Date());
str?=?time1+"讀者"?+?reader?+?"準(zhǔn)備讀取"?+?'\n';
t.append(str);
controlClass.startRead();?//?讀者開始工作
str?=?"讀者"?+?reader?+?"正在讀取"?+?'\n';
t.append(str);
ControlClass.sleeptime();?//?讀者處于工作階段
controlClass.endRead();?//?讀者結(jié)束讀取
總結(jié)
以上是生活随笔為你收集整理的java线程睡眠分析,java线程睡眠有关问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php重载,PHP重载基础知识回顾
- 下一篇: 怎样用MATLAB画二次函数曲线,MAT