9-6多线程

 

做作业的第二题总结出几种方法:

1、创建类的一个变量,有几个线程对象,变量就是几,然后在run()方法里的try{}catch(InterruptedException e){}语句后面添上一个finally{synchronized(this){this.变量名--;}};这样来锁定,当每次执行时都会执行finally,从而变量一直减,当变量减到0时,然后再run()里面的最后再添加一个判断if(类名.变量名==0){输出线程运行完毕!}我觉得这个适合多个线程对象还有同步线程 !

2、在main() 主函数里面最后写上一个循环,使条件永真,循环里有一个判断语句,判断对象的getStatc()是否等于线程结束状态Thread.State.TERMINATEED,如果等于就输出线程运行完毕!并且跳出循环,当然这种只适合对象比较少的情况。

3、也是在main()函数里写上一个try{}catch(InterruptedException e){}语句.直接在try里面写上Thread.sleep(time);time是比最长时间的线程都大于等于的;这样保证他们都执行完以后,再监视一下线程的状态,当然不确定时间的话就填上一个永真循环,跟上面第2种方法一样;

4、还有一种不符合编程的方法,虽然不符合,但是也能成功,就是直接在run()函数里的try{}catch(InterruptedException e){}语句后面添上一个判断语句,看线程的时间是否等于最长时间,当然这种是要前提下知道最长时间的;这个就不太适合用 了。

另外附于我写的一个例子:

 

class A implements Runnable{

    String str;

    int delay;

    static int n=0;

    public A(String str,int delay){

       this.str=str;

       this.delay=delay;

    }

    public static void main(String[] args) {

       Thread t1=new Thread(new A("A类对象1",1000));

       t1.start();

       Thread t2=new Thread(new A("B类对象1",2000));

       t2.start();

       try {

              Thread.sleep(2000);

               if(t1.getState()==Thread.State.TERMINATED&&t2.getState()==Thread.State.TERMINATED){

                  System.out.println("线程运行完毕 !");

              }

           } catch (InterruptedException e) {

              e.printStackTrace();

           }  

 

    public void run() {

      

       try {

           Thread.sleep(delay);

           System.out.println(str + "\t休眠时间为:" + delay);

       } catch (InterruptedException e) {

           e.printStackTrace();

 

       }

    }

}

 

好就先总结到这儿吧!不知道我写的你是否都看懂.

你可能感兴趣的:(thread,多线程,String,Class,作业,delay)