日期:2014-05-20  浏览次数:20652 次

初学者,JAVA多线程优先级的疑惑,求解,多谢!
刚刚在学JAVA多线程的内容,正在学习setPriority()方法的使用,却碰到了一些问题,先上代码:

代码目的是建立两个线程,设置他们不同的优先级,然后启动这两个线程,向同一个StringBuffer中添加内容,最后打印出StringBuffer中的内容。

线程代码:

public class Base extends Thread {
 public static StringBuffer log=new StringBuffer();
 private int i;

 public void run()
 {
  for(i=1;i<=100;i++)
  {
  log.append( (Thread.currentThread()).getName()+":"+i+" ");
  if(i%10==0)
  {
  log.append("\n");
  }
  }
 }

主函数:

public class Test {

    public static void main(String[] args) throws Exception {
        Base b1=new Base();
        Base b2=new Base();

        b1.setName("b1");
        b2.setName("b2");

        b1.setPriority(Thread.MAX_PRIORITY);
        b2.setPriority(Thread.MIN_PRIORITY);

        b1.start();
        b2.start();

        b1.join();
        b2.join();
        System.out.println(Base.log);

    }


}

照理说我设置了b1线程的优先级高于b2,应该优先运行b1线程放log中添加内容,然后才是b2,但结果却是两个线程几乎就是交替运行,看不出优先关系:

b1:1 b1:2 b1:3 b2:1 b1:4 b2:2 b1:5 b2:3 b1:6 b2:4 b1:7 b2:5 b1:8 b2:6 b1:9 b2:7 b1:10 
b2:8 b1:11 b2:9 b1:12 b2:10 
b1:13 b2:11 b1:14 b2:12 b1:15 b2:13 b1:16 b2:14 b1:17 b2:15 b1:18 b2:16 b1:19 b2:17 b1:20 
b2:18 b1:21 b2:19 b1:22 b2:20 
b1:23 b2:21 b1:24 b2:22 b1:25 b2:23 b1:26 b2:24 b1:27 b2:25 b1:28 b2:26 b1:29 b2:27 b1:30 
b2:28 b1:31 b2:29 b1:32 b2:30 
b1:33 b2:31 b1:34 b2:32 b1:35 b2:33 b1:36 b2:34 b1:37 b2:35 b1:38 b2:36 b1:39 b2:37 b2:38 b1:40 
b2:39 b1:41 b2:40 
b1:42 b2:41 b1:43 b2:42 b1:44 b2:43 b1:45 b2:44 b1:46 b2:45 b1:47 b2:46 b1:48 b2:47 b1:49 b2:48 b1:50