来看看Java多线程相关的类吧。
和其他多数计算机语言不同,Java内置支持多线程编程(multithreaded programming)。
学习多线程,首先需要了解线程和进程的区别,看我上次讲解的 线程和进程的区别
Java的多线程系统建立在Thread类,它的方法以及它的共伴接口Runnable基础上。Thread类封装了线程的执行。既然你不能直接引用运行着的线程的状态,你要通过它的代理处理它,于是Thread实例产生了。为创建一个新的线程,你的程序必须扩展Thread类或者实现Runnable接口。
当Java程序启动时,一个线程立即运行,该线程通常叫做程序的的主线程(main thread),因为它时程序开始时就执行的。主线程主要体现在了以下两点:
- 它是产生其他子线程的线程
- 通常它必须最后完成执行,因为它执行各种关闭操作。
public class Test {
public static void main(String[] args) {
Thread thread=Thread.currentThread();//获得当前线程的引用
System.out.println("当前线程的名称:"+thread.getName());
System.out.println("当前线程的一些信息:名称、优先级、线程组:"+thread);
//修改当前线程的名称为Tomcat
thread.setName("Tomcat");
//修改当前线程的优先级,1-10
thread.setPriority(10);
System.out.println("修改后当前线程的一些信息:名称、优先级、线程组:"+thread);
}
}
运行结果:
当前线程的名称:main
当前线程的一些信息:名称、优先级、线程组:Thread[main,5,main]
修改后当前线程的一些信息:名称、优先级、线程组:Thread[Tomcat,10,main]
在这个程序中,当前线程的引用通过调用Thread类的静态方法currentThread()获得,该引用保存在局部变量中。然后,程序显示了线程的信息。还可以修改线程的名称和优先级,优先级最小为1,最大为10。
下面在看一个例子:
public class Test1 {
public static void main(String[] args) throws InterruptedException {
Thread thread=Thread.currentThread();
System.out.println("开始输出:");
for(int i=1;i<=5;i++){
thread.sleep(1000);//让当前线程暂停1秒
System.out.println(i);
}
System.out.println("输出完毕");
}
}
在这个例子中,第一句代码得到了当前线程的引用,然后开始输出i变量,每输出一次暂停一秒,暂停是sleep()方法来实现的。
Thread类的sleep()方法可能引发一个Interrpted异常。这种情形会在其他线程想要打搅沉睡线程时发生,在实际的程序中,必须灵活处理此类问题。