创建多线程的方式
主线程:
主线程即main线程,main方法是程序的入口,执行main方法时,JVM会找到操作系统开辟一条main方法通向CPU的执行路径,CPU就可以通过该路径来执行main方法。同样的道理,当我们在main方法中开启了新的线程时,JVM也会开辟新的路径通向CPU,让CPU可以通过新的路径执行新的线程任务。且在JVM中,线程的调度是抢占式调度,即哪一个线程的优先度高,就执行哪个线程。
了解Thread:

Thread中常用的方法:
第一种方式:创建一个类并继承类Thread:
java.lang.Thread类:是描述线程的类,要想实现多线程,就必须继承Thread类
实现步骤:
1.创建一个Thread类的子类
2.在该子类中重写run方法,设置线程任务(即设置该线程做什么)
3.创建该子类对象
4.子类对象调用Thread类中的start方法,开启新的线程,此时就会自动执行子类中的run方法
注意:若此时子类对象直接调用run方法,那么是不会开启新的线程的。
第二种方式:创建一个类并实现接口Runnable:
Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
实现步骤:
1.创建一个Runable接口的实现类
2.在该实现类中重写Runable接口的run()方法,设置线程任务(即设置该线程做什么)
3.创建一个实现类对象
4.新建一个Thread对象,在构造方法中传递实现类对象作为参数
5.Thread对象调用start()方法,开启新线程执行run()方法
注意:实现了Runable接口后,依然需要Thread类去调用start()方法,才能开启新线程。即Runnable实现类只负责设置线程任务,
而开启新线程的任务就交给了Thread类去完成,也就是实现了解耦。
知识点:
1.public class Thread extends Objectimplements Runnable :Thread类其实也是实现了Runable接口
// 1.新建一个实现类,实现Runnable接口 public class MyRunnable implements Runnable { // 2.重写run()方法 @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("你爱我,我爱你,蜜雪冰城甜蜜蜜"+i); } } }
public class TestMyRunnable { public static void main(String[] args) throws InterruptedException { // 3.新建实现类对象 MyRunnable mr = new MyRunnable(); // 4.新建Thread对象,并把实现类对象传递给其构造方法做参数 Thread thread = new Thread(mr); // 5.thread调用start方法,开启新的线程 thread.start(); // 调用getName()方法 String name1 = thread.getName(); System.out.println(name1);//Thread-0 // 开启main线程 for (int i = 0; i < 10; i++) { System.out.println("鸿星尔克好样的!"+i); } //调用currentThread()方法 String name2 = Thread.currentThread().getName();//main //调用sleep()方法,睡眠2秒钟 Thread.sleep(2000); System.out.println(name2); } }
我们发现上面的实现类其实可以用匿名内部类来实现。
使用匿名内部类:
public class NoNameInnerClass { public static void main(String[] args) { // 1.使用匿名内部类,新建Runnable对象,并重写run()方法 Runnable mr = new Runnable() { //多态,子类对象指向父类。因为此时new Runnable(){}就相当于一个Runnable的实现类 @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("河南加油!!!"+i); } } }; // 2.新建Thread对象,并把Runnable对象传递给Thread对象 Thread mt = new Thread(mr); // thread调用start()方法,开启新线程 mt.start(); } }

浙公网安备 33010602011771号