admin 管理员组

文章数量: 887016

多线程~~

文章目录

  • 什么是线程、多线程
  • 多线程的创建
    • 方式一:继承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{@Overridepublic 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{@Overridepublic 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() {@Overridepublic 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>{@Overridepublic 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{@Overridepublic 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);}@Overridepublic void run() {for (int i = 0 ;i<10;i++){System.out.println(getName()+"线程正在运行");}}
}

获取正在运行的线程

Thread m = Thread.currentThread( ); //获取当前正在运行的线程

Thread类的线程休眠方法

本文标签: 多线程