上次说了线程的实现方法是调用线程对象的run(),而这里要讲的是第二种方法。
Java当中提供了一个线程接口Runnable,下面是使用方法
RunnableImpl.java
class RunnableImpl implements Runnable{
public void run(){
for(int i = 0; i < 100; i++){
System.out.println("Runnable-->" + i);
}
}
}
Test.java
class Test{
public static void main(String args []){
//生成一个Runnable接口实现类的对象
RunnableImpl ri = new RunnableImpl();
//生成一个Thread对象,并将Runnable接口实现类的对象作为参数
//传递给该Thread对象
Thread t = new Thread(ri);
//通知Thread对象,执行start方法。
t.start();
}
}
用Runnable接口实现类同样能使用线程。
下面介绍些线程的简单控制方法
Thread.sleep(); 使线程进入休眠状态,退出休眠后是进入就绪状态。下面修改RunnableImpl.java
RunnableImpl.java
class RunnableImpl implements Runnable{
public void run(){
for(int i = 0; i < 100; i++){
System.out.println("Runnable-->" + i);
if(i == 50){
try{
Thread.sleep(2000);
}
catch(Exception e){
System.out.println(e);
}
}
}
}
}
同样的,之前使用过Thread.sleep()的时候会产生异常,也同样的方法,捕捉它。
Test.java不变,运行编译后会发现,到50的时候会停大概2s,再继续运行。
Thread.yield(); 使线程退出抢占状态,重新回到抢CPU状态,就是就绪状态。
getPriority()
setPriority()
修改Test.java
class Test{
public static void main(String args []){
//生成一个Runnable接口实现类的对象
RunnableImpl ri = new RunnableImpl();
//生成一个Thread对象,并将Runnable接口实现类的对象作为参数
//传递给该Thread对象
Thread t = new Thread(ri);
//线程优先级最大为10,最小为1,可以使用
t.setPriority(Thread.MIN_PRIORITY);
//通知Thread对象,执行start方法。
t.start();
System.out.println(t.getPriority());
}
}
通过这个代码,可以看出,线程优先级最大为10,最小为1。可用MAX_PRIORITY和MIN_PRIORITY
优先级越高,抢占CPU的概率越大。