本帖最后由 ctl71801 于 2013-09-25 10:23:43 编辑

解决方案 »

  1.   

    你去看看Random()的构造函数源代码就立马知道为啥了。所以new Random(seed) 时要给构造函数传递一个不重复的数作为随机种子,这个就发挥你聪明才智了。
      

  2.   

    data是全局变量,你觉得data线程安全吗?Thread-1data :97343320
    Thread-4data :97343320随机数相同完全是由于data全局变量线程不安全引起的。你把data换成局部变量试试。。
      

  3.   

    private static int data = 0;
    private static int count = 0; public static void main(String[] args) { for (int i = 0; i < 2; i++) {
    new Thread(new Runnable() {
    @Override
    public void run() {
    synchronized (ThreadRandom.class) {
    data = new Random(System.currentTimeMillis() + count)
    .nextInt();
    System.out.println(Thread.currentThread().getName()
    + "data :" + data);
    count ++;
    }
    }
    }).start();
    }
    }
      

  4.   

    1、用:System.nanoTime() 再加 线程名字的hash值 2、先准备一个Random seed = Random(),然后创建线程时,都依次先用这个seed来产生一个随机数作为种子选一个凑活着用吧。