1--多个线程调用同一个对象会不会引起问题?比如多个线程调用同一个数组、队列,会不会出现问题?
  答:CPU控制各个线程的运行,当你同时产生多个线程并访问同一对象时,你将无法确定何时,哪个线程修改你的对象,如更新数组,队列。这是多线程编程中解决对共享资源的访问,通常可通过关键字 synchronized 锁定被访问对象或程序块,使得同一时间只存在一个线程对指定公共资源的访问。
  2--在线程的run函数里面XXX xxx = new XXX();来new一个对象,如果用一个循环来产生多线程,那么相当于会产生多个同名xxx对象,
  答:会产生多个同名对象吗?想想当你 MyClass objA=new MyClass();执行上十遍,你会产生十个MyClass类的对象,但最终objA只会引用最后一次产生的对象。而其它九个对象同样存在,不过不再有任何方式引用它,自会由虚似机来回收它。(当然Java的特色了。),所以同一线程中你不会因此产生冲突。
   而多个线程中产生MyClass()类的对象时,则是不同的类中保存有同名的对象,这也没什么问题的。要知道线程也是线程类的对象,你参照下边示例去想想:
  class a{}  public class b{
   a a1;
    public b(){
     a1=new a();
    }
  }
  上边的代码中,当你new出多个b类型的对象时,你还会担心存在多个同名的a1对象吗?
   
  Java是一门好语言,刚学不久吧,好好努力吧。会有收获的。

解决方案 »

  1.   

    1.在同时调用同一个数组、队列时使用synchronized协调多线程访问共享资源.
      

  2.   

    楼主对XXX xxx = new XXX();这样的语句执行n遍的结果都不大清楚,请努力学习JAVA基础知识吧
      

  3.   

    首先谢谢楼上各位的回复,并声明我学java确实是初学者,才两个星期,并在为学好基础知识努力;还没学到多线程那一章,但是碰到一个程序我想到了这些问题,所以提前到这里在解疑;如下是一个多线程的测试程序,我循环产生了多个线程对象st,我知道其实st只是一个变量,用来存放参考值,所以st最后指向的是最后产生的那个对象,对吗?但对于线程来说,产生的5个线程对象都会运行,我想这也是为什么产生多线程的时候不用去管st对象到底指向了谁,而且只要产生了几个线程对象就OK了,是不是?
    public class SimpleThread extends Thread {
      private int countDown = 5;
      private static int threadCount = 0;
      private int threadNumber = ++threadCount;
      public SimpleThread() {
        System.out.println("Making " + threadNumber);
      }
      public void run() {
        while(true) {
          System.out.println("Thread " + 
            threadNumber + "(" + countDown + ")");
          if(--countDown == 0) return;
        }
      }
      public static void main(String[] args) {
        for(int i = 0; i < 5; i++)
          SimpleThread st = new SimpleThread();
          st.start();
        System.out.println("All Threads Started");
      }
    }