创建线程
- 创建线程的方式:
- 继承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()方法
|