在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
}
}