public class MultThread extends Thread{
String name;
//初始化name变量
public MultThread(String name){
this.name=name;
}
//线程
public void run(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println("Interrupt exception");
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("thread name: "+name);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Autgenerated method stub
//创建多个线程
MultThread mt1=new MultThread("one");
MultThread mt2=new MultThread("two");
MultThread mt3=new MultThread("three");
mt1.start();
mt2.start();
mt3.start();
//thread name: one
// thread name: three
//thread name: two 为什么结果会是这样啊,难道不应该是先启动mt1么
}
}
多线程的特点就是启动后由虚拟机进行调度(java抢占模式),因此输出的结果并不是有序的
下面的是我一些摘写记录,分享一下
Thread t=Thread.currentThread();----->获得当前线程,即主线程
创建线程----》继承java.lang.Thread或者实现java.lang.Runnable接口,并实现run()方法
新建的线程不会自动开始运行,必须通过start()方法启动,如果不调用这个方法,线程不会自动运行,也就时说可以事先创建线程,在需要的事后才启动他们
继承Thread的线程
Mythread t=new Mythread();
t.start();
实现Runnable()接口的线程
Myrun m=new Myrun();
Thread t=new Thread(m);
t.start();
用new语句创建线程对象处于新建状态,在堆区中也分配了该线程对象的内存
当一个线程对象创建后,其他线程调用它的start()方法,该线程就近如就绪状态,该线程位于可运行池中,等待获得cpu使用权
运行状态:改状态的线程占用cpu执行程序代码,只有就绪状态的线程才有机会转到运行状态
阻塞:因某种原因放弃cpu,暂时停止运行,当线程处于阻塞状态时,java虚拟机不给线程分配cpu,直到线程重新进入就绪状态,才有机会转到运行状态
死亡:当线程推出run方法时,就进入死亡状态
http://wenku.baidu.com/view/d0d0f318a8114431b90dd8da.html