Thread类实现多线程。
一、创建多线程实现类。
public class MyThread extends Thread { //继承Thread类 public MyThread() { } public MyThread(String name) { //通过构造函数设置线程名称 super(name); } @Override public void run() { // 重写run方法 System.out.println(getName()); //打印当前线程名称 } }
二、启动多线程。
public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.setName("子线程"); //设置线程的名称 myThread.start(); //这才是启动多线程,开辟新的栈空间。线程之间才不会互相影响 //myThread.run();//这只是普通的调用方法,不会新启动线程,正常压方法入栈。 new MyThread().start();//再启动一个子线程 System.out.println(Thread.currentThread().getName());//获取当前线程名称 }
Runnable接口实现多线程。
一、创建Runnable接口的实现类。
public class MyRunnable implements Runnable{ @Override public void run() { //实现run方法 System.out.println("子线程运行成功"); } }
二、启动新线程。
public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); new Thread(myRunnable).start(); //启动新线程 }
Thread和Runnable的区别
一、多线程的实现首先推荐使用Runnable接口实现。
1、因为Runnable是接口,所以避免了JAVA只能单继承的的局限性。
2、降低了程序的耦合性,所以也就变相的增强了程序的扩展性。
1、把设置线程和开启线程进行了分离。
多线程的两概念
一、并发:指两个或多个事件在同一个时间段内发生。单核CPU,交替处理多个事件。
二、并行:指两个或多个事件在同一时刻同时发生。多核CPU,同时处理多个事件。
使用匿名内部类创建多线程
一、作用:简化代码。
二、代码
public static void main(String[] args) { new Thread() { @Override public void run() { //重写run方法 System.out.println("Thread子线程成功执行"); } }.start(); Runnable runnable = new Runnable() { //接口实现类 @Override public void run() { System.out.println("Runnable子线程成功执行"); } }; new Thread(runnable).start(); }
线程调度
一、分时调度:所有线程轮流使用CPU的使用权,平均分配每个线程的每个线程占用CPU的时间。
二、抢占式调度:优先让优先级高的线程使用CPU,如果线程的优先级相同,就随机选择一个线程(线程随机性)。JAVA使用的是抢占式调度。