您的位置:首页 > 编程语言 > Java开发

java之学习多线程(三)

2015-08-28 15:43 246 查看
线程的操作状态:

1、创建状态

在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时,他被分配了相应的内存空间和其他资源,但还处于不可运行状态。新建一个线程对象可以采用Thread类的构造方法来实现,如 Thread thread = new Thread().

2、就绪状态

新建线程对象后,调用该线程的start()方法就可以启动线程。当线程启动时,就进入了就绪状态。此刻,线程将进入线程队列排队,等待cpu服务,表明他已经具备运行条件。

3、运行状态

当就绪的线程被调用时,线程进入了运行状态。此时自动调用对象的run()方法。

4、堵塞状态

当在运行的线程被认为挂起或让出CPU暂时中断自己的执行,便进入堵塞状态。在可执行的情况下,调用 sleep()、suspend()、wait()等方法,线程将进入堵塞状态。堵塞时不会进入排队队列,只有消去堵塞的原因线程才会转为就绪状态。

5、终止状态

线程调用stop()或run()方法执行结束后,线程即处于终止状态。处于终止状态的线程不具有继续运行的能力。

(一)线程的命名和取得(public static Thread currentThread().取得当前线程对象)

public class gain_line_name {

	/**
	 * @param args
	 */
	public static void main(String[] args) {   
		// TODO Auto-generated method stub
		T_hread T = new T_hread();
		new Thread(T).start();                     //线程实例化
		new Thread(T).start();
		new Thread(T,"线程1").start();
		new Thread(T,"县城2").start();
	}
}
class T_hread implements Runnable{
	@Override
	public void run(){
		System.out.println(Thread.currentThread().getName()); //当前线程名称
	}
}
结果:Thread-0
      线程1
      Thread-1
      县城2//当我们不给线程命名是系统默认命名 Tread_*****
(二)线程的休眠

线程的休眠是使其程序执行的慢一些。(public static void sleep(long millis)throws InterruptedException,设置休眠时间单位是毫秒)

public class rest_line {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyThread Me =new MyThread();
		new Thread(Me,"line_1").start();
		new Thread(Me,"line_2").start();
		
	}

}
class MyThread implements Runnable {
	@Override 
	public void run(){
		for(int x = 0;x<10;x++){
				try {
					Thread.sleep(100);       //每次到这休眠100秒
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName()+",x="+x);
		}
	}
}


(三)线程的优先级(设置高优先级只是表示该线程可能先执行而已。)

public class priority_line {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyThread Me = new MyThread();
		Thread T1 = new Thread(Me,"线程一");
		Thread T2 = new Thread(Me,"线程二");
		Thread T3 = new Thread(Me,"线程三");
		T3.setPriority(Thread.MAX_PRIORITY);            //设置最高优先级
		T2.setPriority(Thread.MIN_PRIORITY);            //设置低等优先级
		T1.setPriority(Thread.NORM_PRIORITY);           //设置中等优先级
		T3.start();
		T2.start();
		T1.start();
		
	}

}
class MyThread implements Runnable{
	@Override
	public void run(){
		for(int x = 0;x < 10;x++){
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName()+",x="+ x );
		}
	}
}
、、、、、、、、、、、、、、、、、、、、、、、、、来试试输出主方法的优先级
public class TestDemo{
public static void main() throws Exception{
        System.out.println(Thread.currentThread().getPriority());
}
}运行结果 5,表示中等优先级。10 高等  5 中等  1 低等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: