线程:一个进程内部,并行执行的任务
如:QQ与多个人聊天,迅雷同时下载多个文件
创建线程的两种方式
1继承Thread
2实现Runnable
继承Thread
Thread是线程类
继承Thread,定义自己的线程子类
需要重写run()方法
run()方法包含并执行的代码
继承Thread
用start()方法,启动线程
线程启动后,执行run()方法中的代码
public class Test1XianCheng {
public static void main(String[] args) {
/**
* 新建两个线程对象,并分别启动
* 线程启动后,自动执行run()方法代码
*/
T1 t1=new T1();
T1 t2=new T1();
t1.start();
t2.start();
System.out.println("---------");
}
static class T1 extends Thread {
@Override
public void run() {
String n=getName();
//打印1~5
for(int i=1;i<=5;i++)
{
System.out.println(n+" - "+i);
}
}
}
}
运行结果
Thread-0 - 1
---------
Thread-1 - 1
Thread-0 - 2
Thread-1 - 2
Thread-0 - 3
Thread-1 - 3
Thread-1 - 4
Thread-1 - 5
Thread-0 - 4
Thread-0 - 5
实现Runnable接口
定义Runnable接口的子类
实现run()方法
新建线程对象时,把Runnable对象交给线程
线程启动后,执行Runnable对象的run()方法
实现Runnable接口
public class Test2XianCheng {
public static void main(String[] args) {
//封装代码的对象
R1 r1 = new R1();
//代码交给线程
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r1);
//两个线程启动后,都调用r1的run方法
t1.start();
t2.start();
System.out.println("---------");
}
/**
* 用来封装代码
* run()方法代码要放入线程执行
*/
static class R1 implements Runnable{
@Override
public void run() {
//获得正在执行的线程对象
Thread t = Thread.currentThread();
String n = t.getName();
for(int i=1;i<=5;i++)
{
System.out.println(n+" - "+i);
}
}
}
}
运行结果
---------
Thread-0 - 1
Thread-1 - 1
Thread-0 - 2
Thread-1 - 2
Thread-0 - 3
Thread-1 - 3
Thread-0 - 4
Thread-1 - 4
Thread-0 - 5
Thread-1 - 5