现在的位置: 首页 > 综合 > 正文

线程学习之–传统线程互斥

2013年07月04日 ⁄ 综合 ⁄ 共 2755字 ⁄ 字号 评论关闭

//线程同步

    publicstaticvoidmain(String[] args) {

       newSync().show();

    }

   

    publicvoidshow(){

       final Infoinfo=new Info();

       //创建一个线程

       newThread(new Runnable(){

           publicvoidrun() {

              while(true){

                  try {

                     Thread.sleep(10);

                  } catch(InterruptedException e) {

                     e.printStackTrace();

                  }

                  info.outname1("wangyong");

              }

             

           }

       }).start();

      

       //在创建一个线程

       newThread(new Runnable(){

           publicvoidrun() {

              while(true){

                  try {

                     Thread.sleep(10);

                  } catch(InterruptedException e) {

                     e.printStackTrace();

                  }

                  info.outname1("zhangsan");

              }

             

           }

       }).start();

    }

   

    classInfo{

       publicvoidoutname1(String name){

           intlen=name.length();

           for(inti=0;i<len;i++){

               System.out.print(name.charAt(i));

           }

           System.out.println();

       }

    }

 

}

以上的实例可以看出,线程不同步。

 

 

该如何修改呢?

packagedemo;

 

publicclass Sync{

 

    /**

     *@paramargs

     */

    //线程同步

    publicstaticvoidmain(String[] args) {

       newSync().show();

    }

   

    publicvoidshow(){

       final Infoinfo=new Info();

       //创建一个线程

       newThread(new Runnable(){

           publicvoidrun() {

              while(true){

                  try {

                     Thread.sleep(10);

                  } catch(InterruptedException e) {

                     e.printStackTrace();

                  }

                  info.outname1("wangyong");

              }

             

           }

       }).start();

      

       //在创建一个线程

       newThread(new Runnable(){

           publicvoidrun() {

              while(true){

                  try {

                     Thread.sleep(100);

                  } catch(InterruptedException e) {

                     e.printStackTrace();

                  }

                  info.outname3("zhangsan");

              }

             

           }

       }).start();

    }

   

    staticclassInfo{

        //方法一

       publicvoidoutname1(String name){       

           intlen=name.length();

           synchronized(Info.class){

           for(inti=0;i<len;i++){

              System.out.print(name.charAt(i));

           }

           System.out.println();

           }

       }

        //方法二

       publicsynchronizedvoidoutname2(String name){        

           intlen=name.length();

           for(inti=0;i<len;i++){

              System.out.print(name.charAt(i));

           }

           System.out.println();

       }

      

        //方法二

       publicstaticsynchronizedvoidoutname3(String
name){        

           intlen=name.length();

           for(inti=0;i<len;i++){

              System.out.print(name.charAt(i));

           }

           System.out.println();

       }    

    }

 

}

抱歉!评论已关闭.