进程:正在运行中的程序
线程:负责执行程序的控制单元(执行路径)
一个进程中可以有多个执行路径,称之为多线程
一个进程中至少要有一个线程
创建新执行线程有两种方式
一、继承Thread类
步骤:
1、定义一个类继承Thread类
2、覆盖Thread类中的run方法(run方法中就是线程要执行的任务代码)
3、创建Thread子类对象
4、调用start方法开启线程,执行run方法
1 class Demo extends Thread 2 { 3 private String name; 4 Demo(String name) 5 { 6 this.name = name; 7 } 8 9 void run() 10 { 11 for(x=0;x<9;x++) 12 { 13 System.out.println(name+"----"+x+"当前执行run方法的线程名称"+Thread.currentThread().getName()); 14 } 15 } 16 } 17 18 class ThreadDemo 19 { 20 public static void main(String[] args) 21 { 22 Demo d1=new Demo("zhangsan"); 23 24 Demo d2=new Demo("lisi"); 25 d1.start(); 26 d2.start(); 27 28 System.out.println("当前执行run方法的线程名称"+Thread.currentThread().getName()); 29 } 30 }
问题:这个Demo类必须继承Thread类,那如果Demo 有父级(class Demo extends Parent)的话,是不是就无法再继承类,那么就想能不能实现接口
二、实现Runnable接口(开发中较为常用)
步骤:
1、定义一个类实现Runnable接口
2、重写接口中的run方法(run方法中就是线程要执行的任务代码)
3、通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数参数进行传递
4、调用线程对象的start方法开启线程,执行run方法
1 class Demo implements Runnable 2 { 3 private String name; 4 Demo(String name) 5 { 6 this.name = name; 7 } 8 9 public void run() 10 { 11 for(x=0;x<9;x++) 12 { 13 System.out.println(name+"----"+x+"当前执行run方法的线程名称"+Thread.currentThread().getName()); 14 } 15 } 16 } 17 18 class ThreadDemo 19 { 20 public static void main(String[] args) 21 { 22 new Thread(new Demo("wangwu")).start(); 23 new Thread(new Demo("zhaoliu")).start(); 24 System.out.println("当前执行run方法的线程名称"+Thread.currentThread().getName()); 25 } 26 }
Thread.currentThread();获取当前运行线程
Thread.currentThread().getName();方法获取线程名称