多线程作业
1、调试教材P335【例18.4】进度条线程的插入(join)。
package luhkel; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JProgressBar; public class s1 extends JFrame{ private Thread threadA; private Thread threadB; final JProgressBar progressBar = new JProgressBar(); final JProgressBar progressBar2 = new JProgressBar(); int c=0; public static void main(String[] args) { // TODO 自动生成的方法存根 init(new JFrame(),100,100); } public s1(){ super(); getContentPane().add(progressBar, BorderLayout.NORTH); getContentPane().add(progressBar2, BorderLayout.SOUTH); progressBar.setStringPainted(true); progressBar2.setStringPainted(true); threadA =new Thread(new Runnable(){ int c=0; public void run(){ while(true){ progressBar.setValue(++c); try{ Thread.sleep(100); threadB.join(); } catch(Exception e){ e.printStackTrace(); } } } }); threadA.start(); threadB= new Thread(new Runnable(){ int c=0; public void run(){ while(true){ progressBar2.setValue(++c); try{ Thread.sleep(100); } catch(Exception e){ e.printStackTrace(); } if(c==100) break; } } }); threadB.start(); } public static void init(JFrame frame,int width,int height){ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(width, height); frame.setVisible(true); }}
2、仿照教材P335【例18.4】,将教材P330【例18.2】改造成两个线程(定义匿名内部类的方式),效果是上下两个图标分别按照不同的速度滚动。(20分)
3、调试教材P341【例18.8】火车站售票系统,体会多线程同时访问资源带来的冲突问题。并分别采用“同步块”和“同步方法”两种线程同步机制,改进原来的代码,即实现【例18.9】和【例18.10】。
package luhkel; public class s3 implements Runnable { int c=10; public void run(){ while(true){ if(c>0){ try{ Thread.sleep(100); } catch(Exception e){ e.printStackTrace(); } System.out.println("tickets"+c--); } } } public static void main(String[] args) { // TODO 自动生成的方法存根 s3 t =new s3(); Thread tA= new Thread(t); Thread tB= new Thread(t); Thread tC= new Thread(t); Thread tD= new Thread(t); tA.start(); tB.start(); tC.start(); tD.start(); } }