简介:
新建线程很简单,只需要用new关键字创建一个线程对象,并且将它start()即可。既,Thread t1 = new Thread(); t1.start(); 分析,start方法会新建一个线程并让这个线程执行run()方法。但是如果只是run(),则虽然可以正常执行,但是不能起到实际的作用。
如:Thread t1 = new Thread(); t1.run();原因是,run()只会在当前线程中,串行执行run()中的代码。我们需要把具体的额任务放在run()中。
例:
public class NewThread extends Thread{
public static void main(String[] args) {
Thread t1 = new Thread(){
public void run() {
System.out.println("Hellow World...");
}
};
t1.start();
}
}
或者:
public class NewThread extends Thread{
@Override
public void run() {
System.out.println("Hellow World...");
}
public static void main(String[] args) {
Thread t1 = new NewThread();
t1.start();
}
}
备注:使用的是继承Thread类的方法,而通常还可以通过实现Runable接口的方式来创建线程。具体区别和联系如下的demo所示:
Runable.java类内容如下:
public class RunThread implements Runnable {
private int ticket = 25;
@Override
public void run() {
for(int i = 0;i < 20;i++){
if(this.ticket > 0){
String name = Thread.currentThread().getName();
System.out.println(name + "卖票"+":ticket"+this.ticket--);
}
}
}
}
Thread类内容如下:
public class Thread1 extends Thread {
private String name;
public static int count = 10;
public Thread1(String name){
this.name = name;
}
@Override
public void run() {
count --;
System.out.println("线程"+this.name+":is running."+count);
}
}
Test类如下:
/**
* 区别与联系:
1, 一个类只能继承一个父类,存在局限;一个类可以实现多个接口
2, 在实现Runable接口的时候调用Thread的Thread(Runnable run)或者Thread(Runnable run ,String name)构造方法创建进程时,使用同一个Runnable实例,如上程序中使用的都是rt,则建立的多线程的实例变量也是共享的;
但是通过继承Thread类是不能用一个实例建立多个线程;
故而实现Runnable接口适合于资源共享;
当然,继承Thread类也能够共享变量,能共享Thread类的static变量;
3, Runnable接口和Thread之间的联系:Thread源码如下
public class Thread extends Object implements Runnable
可以看出Thread类也是Runnable接口的子类;
* @author T.c
* 创建时间:2016年10月2日 上午11:43:22
*/
public class Test {
public static void main(String[] args) {
new Thread1("tc").start();
new Thread1("tcc").start();
RunThread rt = new RunThread();
new Thread(rt,"r1").start();
new Thread(rt,"r2").start();
}
}
第一种Thread通过构造法方法传递线程名称Thread1(String name)。第二种Runable则是直接使用Thread(Runnable target, String name)的方式。区别于联系见Test类说明,根据实际的需求合理选择两种方式。