java多线程对于多核cpu来说输出无先后顺序

    java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。

下面代码是第一种代码中的注释清楚说明了对于多线程来说对run方法的使用一般是无先后顺序的,但对于单核的cpu来说由于它们都会放在同一个队列中,这时候会有先后顺序,但是对于多核cpu来说,会出现多个队列,如果线程不在同一个队列当中那就无确定的先后顺序。下面的的输出就可以验证。


package test;

import test.Test6.Mythread;

public class Test6 {

  static class Mythread extends Thread{
	  //这里定义静态类是为了在启动线程时不用
	  //Test6 p=new Test6();
	  //Mythread q=p.new Mythread().start();
	  //静态的直接new Mythread().start();既可以启动
	     int t;
	     int time;
		public void run(){
			System.out.println("线程"+Thread.currentThread().getId()+"运行了");//这里可能是先是线程9也有可能先是线程10
			System.out.print(t);//先输出的可能是对象p的变量也有可能是对象p的变量
			
		}
		
		/*public void start(){
			System.out.println("我的线程启动了");
			super.start();
		}*/
		
		public void set(int t1,int time1){
			t=t1;
			time=time1;
			//System.out.println(t);
		}
	}
  
  
  public static void main(String args[]) throws InterruptedException{
	  //这里申明多个线程时对run方法的使用一般是无先后顺序的,但对于单核的cpu来说由于它们都会放在同一个
	  //队列中,这时候会有先后顺序,但是对于多核cpu来说,会出现多个队列,如果线程不在同一个队列当中那就无确定的先后顺序
	 Mythread p=new Mythread();//线程9
	 Mythread p1=new Mythread();//线程10
	 p.set(2,100);
	 p1.set(3,50);
	 p.start();//启动线程9
	 p1.start();//启动线程10
  }
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值