Java多线程
- 一、单独使用Thread和Runnable两种实现方式(传参困难)
- 二、使用Thread调用Runnable两种实现方式(方便传参)
一、单独使用Thread和Runnable两种实现方式(传参困难)
1、继承Thread类实现多线程
继承Thread类的方法本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:
public class MyThread extends Thread {
public void run() {
System.out.println("()");
}
}
启动线程:
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();
2、实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:
public class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println("()");
}
}
为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
二、使用Thread调用Runnable两种实现方式(方便传参)
1、普通写法(需要新实例化对象,然后重写run方法)
需要写定义新的Runnable方法,然后调用它来实现多线程。
public class Test {
public static void main(String[] args) {
Runnable rb = new Runnable() {
@Override
public void run() {
/*在此可以传带参的值*/
System.out.println("test");
}
};
Thread th = new Thread(rb);
th.start();
}
2、简便写法(不用重写run方法,新建线程)
一步到位创建新线程,Thread后面括号里的部分其实就等于run()方法的重写。
public class Test {
public static void main(String[] args) {
new Thread(() -> {
try {
//发送MQ
setMsg(msgInfo);
//msgInfo是自定义个一个类,里面有很多参数
}
} catch (Exception ex) {
}
}).start();
}
}