import java.lang.Thread;
public class Test{
  public static void main(String[] args){
    ThreadTest t=new ThreadTest("goodteam");
    t.start();
    ThreadTest t2=new ThreadTest("lzs");
    t2.start();  }
}
class ThreadTest extends Thread{
  private String name;
  public ThreadTest(String name){
    this.name=name;
  }
  public  void run(){
     synchronized(this){
      for(int i=0;i<200;i++){
        System.out.print(name+"#"+i+"#");
        if(i%20==0)
          System.out.println();  
      }
    }
  }
}

解决方案 »

  1.   


    class ThreadTest extends Thread{
      private String name;
      private static int i=0;
      public ThreadTest(String name){
        this.name=name;
      }
      public  void run(){
         synchronized(i){
          for(;i<200;i++){
            System.out.print(name+"#"+i+"#");
            if(i%20==0)
              System.out.println();  
          }
        }
      }
    }
      

  2.   

    看不明白你写的,你那个就是起来两个单独的线程,没有用到并发。
    这样才实现并发:public class Test {
    static Object o = null;

    public static void main(String[] args) {
    ThreadTest t = new ThreadTest(); Thread  t1 = new Thread(t,"A");
    t1.start();
    Thread t2 = new Thread(t,"B");
    t2.start(); }
    }class ThreadTest implements Runnable { public ThreadTest() {

    }
    public void run() {
    synchronized (this) {
    for (int i = 0; i < 200; i++) {
    System.out.println(Thread.currentThread().getName() + "#" + i + "#");
    if (i % 20 == 0)
    System.out.println();
    }
    }
    }
    }
      

  3.   

    个人认为:
    同步对象锁定,是否能同步,主要看锁定对象的地址是否相同.LZ就是使用使用的this.this代表的是自己对象,地址不同.故自能自己对象同步自己.对象之间是不能同步.1楼使用的i,但他加上static,i属于类,java对一个类只分配一个地址,故地址相同.所以能2个对象之间同步.
      

  4.   

    参考一楼,修改如下,测试通过。import java.lang.Thread;
    public class Test{
      public static void main(String[] args){
    ThreadTest t=new ThreadTest("goodteam");
        t.start();
        ThreadTest t2=new ThreadTest("lzs");
        t2.start();  }
    }
    class ThreadTest extends Thread{
      private String name;
      private static Object sysObject = new Object();
      public ThreadTest(String name){
        this.name=name;
      }
      public  void run(){
         synchronized(sysObject){
          for(int i=0;i<200;i++){
            System.out.print(name+"#"+i+"#");
            if(i%20==0)
              System.out.println();  
          }
        }
      }
    }