http://yulin10.bokee.com/2742164.html随便看个例子:
方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个例子:
  
  public class MyThread extends Thread {
  
  int count= 1, number;
  
  public MyThread(int num) {
  
  number = num;
  
  System.out.println("创建线程 " + number);
  
  }
  
  public void run() {
  
  while(true) {
  
  System.out.println("线程 " + number + ":计数 " + count);
  
  if(++count== 6) return;
  
  }
  
  }
  
  public static void main(String args[]) {
  
  for(int i = 0; i 〈 5; i++) new MyThread(i+1).start();
  
  }
  
  }
我想问的是,它这里起了五个线程,但每个都是一个新的MyTread,即在main中的for中创建了每一个不同的对象。这些对象是不会共享它们的数据的,那如果我的程序是每个线程都都产生一个新的对象,那会存在同步的问题吗?而线程中讲的同步的问题都是一个线程间共享数据的情况下吧?

解决方案 »

  1.   

    上面一个有六个线程,还有一个main 线程,同步的意思是指多个线程访问共享同一个数据,
    这六个线程得到的执行机会都是一样的,cpu在这六个线程之间切换,上面的例子不存在同步问题。
    “那如果我的程序是每个线程都都产生一个新的对象”这句话不是很理解
      

  2.   

    如果我的程序是main获取数据后就调用线程来处理,在构造函数中对数据进行深COPY,如
    class T{
      private String s;
      T(String ss) {
        //ss深copy到s
       }
    public static void main(String args[]) {
       while (true) {
        String s = recvData()
        new T(s).start();
       }
    }
    这样的话不是每个线程都是作用于一个不同的对象里的吗,那每个对象的数据也都是独立的。那怎么会共享数据呢。我把main取到的数据都复制给线程,让线程自已处理去。
      

  3.   

    不会实现共享资源,因为你创建了5个Thread,每个Thread各有一份拷贝,你可以使用内部类或者实现Runnable来实现共享资源(同步)
      

  4.   

    楼主可以把count声明成static的试试.  
    public class MyThread extends Thread {
      
      int count= 1, number;