第1页共9页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共9页第9章多线程与Applet//例程9-1:Pi.java/*演示采用多线程技术计算圆周率*/publicclassPi{publicstaticvoidmain(String[]args){PiCaculatorpc=newPiCaculator();Threadt=newThread(pc);t.start();try{Thread.sleep(10000);//休眠,等待可能出现的异常情况t.interrupt();}catch(InterruptedExceptione){e.printStackTrace();}}}classPiCaculatorimplementsRunnable{privatedoublelatestPiEstimate;publicvoidrun(){try{System.out.print("Math.PI="+Math.PI+"\t");calPi(0.00001);System.out.println("thelatestPI="+this.latestPiEstimate);}catch(InterruptedExceptione){System.out.println("ThecaculatorisInterrupted.");}}/**用于计算圆周率的方法,accuracy为计算精度*/privatevoidcalPi(doubleaccuracy)throwsInterruptedException{this.latestPiEstimate=0.0;longiteration=0;intsign=-1;//按给定精度计算圆周率while(Math.abs(Math.PI-this.latestPiEstimate)>accuracy){第2页共9页第1页共9页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共9页if(Thread.interrupted())thrownewInterruptedException();iteration++;sign=-sign;this.latestPiEstimate+=(sign*4.0/(2*iteration-1));}}}//例程9-2:SynDemo.java/*演示没有进行线程同步所带来的问题*/publicclassSynDemo{publicstaticvoidmain(String[]args){DemostratorshareDemostrator=newDemostrator();Threadt1=newThread(shareDemostrator,"t1");Threadt2=newThread(shareDemostrator,"t2");t1.start();t2.start();}}classDemostratorimplementsRunnable{privateintshareData=0;publicvoidrun(){Threadt=Thread.currentThread();for(inti=1;i<=5;i++){intcopy=shareData;try{Thread.sleep((int)(Math.random()*1000));}catch(Exceptione){e.printStackTrace();}System.out.println("Thread"+t.getName()+":copy="+copy+"\tshareData="+shareData);shareData++;}}}第3页共9页第2页共9页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共9页//例程9-3:DeadLockDemo.javapublicclassDeadLockDemo{publicstaticvoidmain(String[]args){DemoObjecta=newDemoObject();DemoObjectb=newDemoObject();a.another=b;b.another=a;Threadt1=newThread(a,"t1");Threadt2=newThread(b,"t2");t1.start();t2.start();}}classDemoObjectimplementsRunnable{publicDemoObjectanother=null;publicvoidrun(){this.method();}publicsynchronizedvoidmethod(){if(this.another!=null){try{Thread.sleep(1000);}catch(Exceptione){e.printStackTrace();}another.method();//下面的代码段实际上是执行不到的System.out.println("Ifyoucanseethisline,nodeadlockhappened");}}}//例程9-4:ThreeThreadDemo.java/*ThreeThreadDemo.java*/publicclassThreeThreadDemo{publicstaticvoidmain(String[]args){第4页共9页第3页共9页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第4页共9页//创建新线程CustomThreadct1=newCustomThread(0);CustomThreadct2=newCustomThread(1);//启动新线程ct1.start();ct2.start();//输出main线程信息for(inti=0;i<5;i++){System.out.println("mainthread:"+i);}System.out.println("mainthreadhasdone!");}}classCustomThreadextendsThread{intid;publicCustomThread(intcustomThreadID){this.id=customThreadID;}//重定义子线程的run()方法publicvoidrun(){//输出自定义线程的信息for(inti=0;i<5;i++){System.out.println("CustomThread#"+this.id+":"+i);}System.out.println("CustomThread#"+this.id+"hasdone!");}}//例程9-5:DigitalClock.java/*采用多线程技术演示一个简单的数字时钟*/importjava.awt.event.*;importjava.awt.*;importjavax.swing.*;publicclassDigitalClockextendsJFrame{publicstaticvoidmain(String[]args){JFrameframe=newDigitalClock();fra...