相关概念
进程:是一次程序的运行。
线程:在进程中独立运行的子任务。
使用多线程的优点:提升系统的运行效率。
如何使用多线程
2.1继承Thread类
Thread类的结构:public class Thread implements Runnable
继承Thread类的方式,最大的局限就是不支持多继承。
用法:定义线程类,此类继承自Thread类,并且重写run方法。然后定义了线程对象后,调用start方法启动线程。
public class MyThread extends Thread { @Override public void run() { System.out.println("MyThread"); } public static void main(String [] args){ MyThread myThread = new MyThread(); myThread.start(); System.out.println("main");}运行结果:mainMyThread或MyThreadmain
启动了两个线程:main主线程和MyThread线程,两个线程谁先运行是随机的,所以才出现了以上的两种运行结果。
start方法通知线程规划器,此线程已经准备就绪,等待调用线程对象的run方法,具有异步执行的效果。若是调用了myThread。run(),则是同步执行,必须先执行完run方法,才会向下执行。
同时注意,一个线程多次调用start方法,会抛出IlllegalThreadStateExeception异常。而多个线程对象执行start方法的顺序页不代表线程启动的顺序。
2.2实现Runnable接口
public class MyRunnable implements Runnable { @Override public void run() { System.out.println("MyRunnable"); } public static void main(String [] args){ MyRunnable myRunnable= new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); System.out.println("main");}
3.多线程相关方法
currentThread():返回代码段正在被哪个线程调用的消息:main Thread-0,Thread-1。
isAlive():判断当前线程是否处于活动状态。
sleep():在指定的毫秒数内让当前正在执行的线程休眠。
getId():获取线程的唯一标识。
4.停止线程
停止一个线程意味着在线程处理完任务之前停掉正在做的操作。
在Java中有三种方法可以终止正在运行的线程:
1)使用退出标志,使线程正常退出
2)stop方法,但该方法是不安全的。
3)使用interrupt方法中断线程。
4.1停止不了的线程
调用interrupt方法来停止线程,但interrupt方法的使用效果并不是像for+break那样,马上就终止循环,调用interrupt方法仅仅在当前线程中打了一个停止的标记,并不是真的停止线程。还需要加入一个判断才可以完成线程的终止。
如何判断线程的状态是不是停止的?
Thread提供了两个方法:1)this,interrupted():测试 当前线程 是否已经中断;2)this,isInterrupted():测试线程Thread对象是否已经中断。