文章目录
- 什么是线程、多线程
- 多线程的创建
- 方式一:继承Thread类
- 方式二:实现Runnable接口
- 匿名内部类方式实现Runnable接口
 
- 方式三: JDK5.0新增:实现Callable接口
 
- Thread的常用方法
- Thread构造器
- Thread获取和设置线程名称
- 获取正在运行的线程
- Thread类的线程休眠方法
 
什么是线程、多线程

多线程是指从软硬件上实现多条执行流程的技术
多线程的创建
方式一:继承Thread类
Java是通过java.lang.Thread类来代表线程的
按照面向对象的思想,Thread类提供了实现多线程的方式
调用start启动线程,只有调用start方法才是启用一个新的线程(直接调用run方法会当成普通方法执行,此时相当于还是单线程执行)
创建一个子线程类
public class Test {
    public static void main(String[] args) {
        Mythread mythread = new Mythread();
        mythread.start();
        for (int i =0;i<10;i++){
            System.out.println(i+"主线程被启动");
        }
        
    }
}
class Mythread extends Thread{
    @Override
    public void run() {
        for (int i =0;i<10;i++){
            System.out.println(i+"子线程被启动");
        }
    }
}
主线程和子线程是同时运行的(不分先后)
 
方式二:实现Runnable接口

 
public class Test {
    public static void main(String[] args) {
        Mythread mythread = new Mythread();
        Thread thread = new Thread(mythread);
        thread.start();
        for (int i =0;i<10;i++){
            System.out.println(i+"主线程被启动");
        }
    }
}
class Mythread implements Runnable{
    @Override
    public void run() {
        for (int i =0;i<10;i++){
            System.out.println(i+"子线程被启动");
        }
    }
}

匿名内部类方式实现Runnable接口
public class Test2 {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i=0;i<10;i++){
                    System.out.println(i+"子线程运行");
                }
            }
        });
        thread.start();
    }
}
前两种线程创建方式都存在一个问题:他们重写的run方法均不能直接返回结果
方式三: JDK5.0新增:实现Callable接口

public class Test2 {
    public static void main(String[] args) throws Exception {
        Mythread1 mythread1 =new Mythread1();
        FutureTask<String> futureTask =new FutureTask<>(mythread1);
        Thread thread =new Thread(futureTask);
        thread.start();
        System.out.println(futureTask.get());
    }
}
class Mythread1 implements Callable<String>{
    @Override
    public String call() throws Exception {
        return "SSSS";
    }
}

 
 
Thread的常用方法
Thread构造器

Thread获取和设置线程名称

public class Test3 {
    public static void main(String[] args) {
        MyThread mythread = new MyThread();
        mythread.start();
    }
}
class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0 ;i<10;i++){
            System.out.println(getName()+"线程正在运行");
        }
    }
}
也可以在MyThread中定义有参构造,直接定义线程名称
public class Test3 {
    public static void main(String[] args) {
        MyThread mythread = new MyThread("1");
        mythread.start();
    }
}
class MyThread extends Thread{
    public MyThread() {
    }
    public MyThread(String name) {
        super(name);
    }
    @Override
    public void run() {
        for (int i = 0 ;i<10;i++){
            System.out.println(getName()+"线程正在运行");
        }
    }
}
获取正在运行的线程
Thread m = Thread.currentThread( ); //获取当前正在运行的线程
Thread类的线程休眠方法





















