Java线程重复执行以及操作共享变量的代码示例
1.题目:主线程执行10次,子线程执行10次,此过程重复50次
代码:
packagecom.Thread.test;
/*
*function:主线程执行10次,子线程执行10次,
*此过程重复50次
*/
publicclassThreadProblem{
publicThreadProblem(){
finalBusinessbus=newBusiness();
newThread(newRunnable(){
publicvoidrun(){
for(intj=0;j<50;j++){
bus.sub(j);
}
}
}).start();
for(intj=0;j<50;j++){
bus.main(j);
}
}
classBusiness{
privatebooleantag=true;
publicsynchronizedvoidsub(intnum){
if(!tag){
try{
this.wait();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
for(inti=0;i<10;i++)
{
System.out.println("subthread"+i+",loop"+num+".");
}
tag=false;
notify();
}
publicsynchronizedvoidmain(intnum){
if(tag){
try{
this.wait();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
for(inti=0;i<10;i++){
System.out.println("mainthread"+i+",loop"+num+".");
}
tag=true;
notify();
}
}
publicstaticvoidmain(String[]args){
ThreadProblemproblem=newThreadProblem();
}
}
2.四个线程,共享一个变量j,其中两个线程对j加1,两个线程对j减1。
代码如下:
packagecom.Thread.test;
//实现4个线程,两个线程加1,两个线程减1
publicclassDemo1{
privatestaticintj=0;
privateAa=newA();
//构造函数
publicDemo1(){
System.out.println("j的初始值为:"+j);
for(inti=0;i<2;i++){
newThread(newRunnable(){
publicvoidrun(){
for(intk=0;k<5;k++){
a.add1();
}
}
}).start();
newThread(newRunnable(){
publicvoidrun(){
for(intk=0;k<5;k++)
{
a.delete1();
}
}
}).start();
}
}
classA{
publicsynchronizedvoidadd1(){
j++;
System.out.println(Thread.currentThread().getName()+"对j加1,目前j="+Demo1.j);
}
publicsynchronizedvoiddelete1(){
j--;
System.out.println(Thread.currentThread().getName()+"对j减1,目前j="+Demo1.j);
}
}
//用于测试的主函数
publicstaticvoidmain(String[]args){
Demo1demo=newDemo1();
}
}