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(); } }