线程是程序执行的一条路径,一个进程可以包含多条线程;
多线程并发执行可以提高程序的效率。
并行指有多个任务同时执行,需要多核CPU
;
并发是指有多个任务请求执行,处理器安排这几个任务交替执行
Java创建线程的方式(1):
public class Method1 {
public static void main(String[] args) {
//创建MyThread对象
MyThread mt = new MyThread();
//调用thread的start方法即可
mt.start();
for (int i = 0; i < 1000000; i++) {
System.out.println("6666");
}
}
}
//创建一个类继承Thread ,重写thread 的 run 方法
class MyThread extends Thread {
public void run() {
for (int i = 0; i < 100000; i++) {
System.out.println(222222222);
}
}
}
继承Thread
的方式:因为子类重写了Thread
的run
方法,当调用run
方法时,直接调用
子类run
方法。
优势:代码简单;弊端:如果子类有父类就不能使用了,因为Java语言是单继承的。
Java创建线程的方式(2):
public class Method2 {
public static void main(String[] args) {
//创建Runnable 子类对象
MyRunnable mt = new MyRunnable();
new Thread(mt).start();//开启线程
for (int i = 0; i < 100000; i++) {
System.out.println(11111111);
}
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i < 1000000; i++) {
System.out.println(22222);
}
}
}
实现Runnable
接口,开启线程的这种方式,查看源码发现,
Thread
调用了init()
方法 this.target = target;
即传递的target
给成员变量的target
赋值,查看Thread
的run方法:
public void run() {
if (target != null) {
target.run();
}
}
当target
不为空时,就会调用子类的重写的run
方法。
这种新开一个线程方法的优点:即使线程类有父类也可以实现Runnable
接口,扩展性好;
弊端:不能直接使用Thread
中的方法需要先获取到线程对象后,才能得到Thread
的方法,代码复杂。