创建线程
- 创建线程的方式:
- 继承java.lang.Thread
- 实现java.lang.Runnable接口
- 所有的线程对象都是Thead及其子类的实例
- 每个线程完成一定的任务,其实就是一段顺序执行的代码
继承java.lang.Thread创建线程
public class Test1 { public static void main(String[] args){ System.out.println("现在是主线程: "+Thread.currentThread()); //用静态方法获取当前正在执行的线程 System.out.println("下面新建两个线程"); new Test(100).start(); new Test(100).start(); //这里开启两个线程,但不是完成同一件任务 } } class Test extends Thread{
//继承Thread类 private int tickets; Test (int tick){ tickets=tick; } public void run(){ for (;tickets>0;tickets--) { System.out.println("当前线程:"+getName()+" 卖出第 "+tickets+" 张票。"); //用this获得当前线程 if (tickets==1){ System.out.println("票已卖完,当前线程是: "+getName()); } } } }
0036 Java学习笔记-多线程-创建线程的三种方式
创建线程
- 创建线程的三种方式:
- 继承java.lang.Thread
- 实现java.lang.Runnable接口
- 实现java.util.concurrent.Callable接口
- 所有的线程对象都是Thead及其子类的实例
- 每个线程完成一定的任务,其实就是一段顺序执行的代码
继承java.lang.Thread创建线程
package testpack;
public class Test1 {
public static void main(String[] args){
System.out.println("现在是主线程: "+Thread.currentThread()); //用静态方法获取当前正在执行的线程
System.out.println("下面新建两个线程");
new A(100).start();
new A(100).start(); //这里开启两个线程,但不是完成同一件任务
}
}
class A extends Thread{ //继承Thread类
private int tickets;
A (int tick){
tickets=tick;
}
public void run(){
for (;tickets>0;tickets--) {
System.out.println("当前线程:"+getName()+" 卖出第 "+tickets+" 张票。"); //用this获得当前线程
if (tickets==1){
System.out.println("票已卖完,当前线程是: "+getName());
}
}
}
}
- 继承Thread类,开启线程的步骤:
- 定义一个类,继承Thread,重写run()方法,run()方法就是线程要完成的任务
- 创建该类的实例,并调用start()方法启动线程
- 继承Thread类开启的线程,各自完成各自的任务
实现java.lang.Runnable接口创建线程
public class Test1 { public static void main(String[] args){ System.out.println("现在是主线程: "+Thread.currentThread()); System.out.println("下面新建两个线程"); Test test=new Test(100); //创建一个任务的对象 new Thread(test,"线程A").start(); //以同一个任务对象为target,开启两个线程 new Thread(test,"线程B").start(); //两个线程完成同一项任务,但是二者协作沟通不好 } } class Test implements Runnable{ //实现Runnable接口 private int tickets; Test (int tick){ tickets=tick; } public void run(){ //同样重写run()方法,就是线程要完成的任务 for (;tickets>0;tickets--) { System.out.println("当前线程:"+Thread.currentThread()+" 卖出第 "+tickets+" 张票。"); if (tickets==1){ System.out.println("票已卖完,当前线程是: "+Thread.currentThread()); } } } }
Thread、Runnable的比较
线程的生命周期
start()与run()方法
|