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

java Thread类 线程学习 一:

2011-05-09 12:00 423 查看
欢迎技术交流。 QQ:138986722

线程中的7种非常重要的状态:(有的书上也认为只有前五种状态:而将"锁池"、"等待池"

都看成是"阻塞"状态的特殊情况:这种认识也是正确的,但是将"锁池"和"等待池"单独分

离出来有利于对程序的理解)

1、初始状态、线程创建、线程对象调用start()方法。

2、可运行状态、也就是等待Cpu资源、等待运行的状态。

3、运行状态、获得了Cpu资源,正在运行状态。

4、阻塞状态、也就是让出Cpu资源、进入一种等待状态、而不是可运行状态、有三种

情况会进入阻塞状态。

1)、如等待输入(输入设备进行处理、而Cpu不处理)、则放入阻塞、直到输入完毕、

阻塞结束后会进入可运行状态。

2)、线程休眠、线程对象调用sleep()方法、阻塞结束后会进入可运行状态。

3)、线程对象2调用线程对象1的join()方法、那么线程对象2进入阻塞状态、直到线

程对象1中止。

5、中止状态、也就是执行结束。

6、锁池状态。

7、等待队列。

线程的优先级:

线程的优先级代表该线程的重要程度、当有多个线程同时处于可执行状态并等待获得

CPU时间时、线程调度系统根据各个线程的优先级来决定给谁分配CPU时间、优先级高

的线程有更大的机会获得CPU时间、优先级滴的线程也不是没有机会、只是机会要小一

些罢了。

你可以调用Thread类的方法getPriority()和setPriorty来存取线程的优先级、线程的

优先级介于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间、缺省是5

(NORM_PRIORITY)。

直接继承Thread类:

package com.boxun.hzw.test;

/**
* 直接继承Thread类
* @author Administrator
*
*/
public class TestTTT extends Thread {

public int count = 1 ,number ;

public TestTTT(int num){
number = num ;
}

/*
* 必须覆盖Thread类的run方法
* Thread类提供我们的线程所要执行的代码、
* 为了指定我自己的代码、只需要覆盖它
* @see java.lang.Thread#run()
*/
public void run(){
while(true){
System.out.println("线程:"+number+"---计数:"+count++);
/*
* 这里可以运行++count == 双数(偶数2/4/6/8)看看会出现死循环
* 原因——System.out.println()中count++了一次、原本是1变为2、下面++count在让2变为3、
* 按照这个规律偶数永远不能被判断到、所以一直跑下去、
*/
if(++count == 11) return ;
}
}

/**
* @param args
*/
public static void main(String[] args) {
/*
* start()方法
* 使该线程开始执行;
* Java 虚拟机调用该线程的 run 方法。
* 结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。
* 多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。
*
*/
new TestTTT(1).start();
}
}


实现Runnable接口创建线程:

package com.boxun.hzw.test;

/**
* Runnable接口:
* 里面只有一个方法、run。
*
* @author Administrator
*
*/
public class ThreadTest implements Runnable {
int count = 1 ,number ;
public static void main(String[] args) {
ThreadTest t = new ThreadTest();
for (int i = 0; i < 5; i++) {
t.number = i +1 ;
new Thread(t).start();
}
}

/*
* 使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。
* @see java.lang.Runnable#run()
*/
public void run() {
while (true) {
System.out.println("线程:"+number +"计数:"+count++);
if(count == 5){ count = 1 ; return ;}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: