实现Runnable接口创建线程类步骤如下:
1.创建实现Runnable接口的实现类
2.重写Runnable接口的run()方法
3.创建实现类的线程对象
4.将线程对象作为Thread的target来创建Thread对象
5.启动start()方法
public class SecondThread implements Runnable{
private int i=0;
@Override
public void run() {
for(;i<100;i++)
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
public static void main(String[] args){
Thread.currentThread().setName("主线程");//主线程设置线程名称
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread()+ ": "+i);
//当i=20时 创建子线程并启动
if(i==20){
SecondThread target = new SecondThread();
new Thread(target,"子线程").start();
}
}
}
}
使用Runnable接口创建线程可以共享同一个线程类变量
1.首先使用继承Thread类来实现一个卖票例子:假设总共火车站还剩五张火车票
public class TicketThread extends Thread {
private int num = 5;//票数为5
public void run(){
for(int i=num;i>=1;i--)
System.out.println(this.getName() + "窗口还剩 "+ i + "张火车票");
}
public static void main(String[] args){
//创建三个子线程:卖票窗口
Thread thread1 = new TicketThread();
thread1.setName("1号");
Thread thread2 = new TicketThread();
thread2.setName("2号");
Thread thread3 = new TicketThread();
thread3.setName("3号");
//启动线程
thread1.start();
thread2.start();
thread3.start();
}
}
运行结果:
三个窗口其实各自卖了五张票;
使用Runnable接口来创建线程类:
public class TicketThread implements Runnable{
private int num = 5;
@Override
public void run() {
for(;num>=0;num--)
System.out.println(Thread.currentThread().getName()+ "窗口还剩 "+ num + "张火车票");
}
public static void main(String[] args){
Runnable target = new TicketThread();
new Thread(target,"1号").start();
new Thread(target,"2号").start();
new Thread(target,"3号").start();
}
}
创建的三个对象都使用一个target,则共用同一个线程执行体,共享了变量
使用Runnable创建线程优点:
继承Runnable接口创建线程,还可以继承其他类,方便功能扩展
可以实现共享一个线程的变量 非常适合多个相同线程处理同一份资源,将代码和数据分离,体现了面向对象的思想