单进程多线程
什么是进程?
代表着一个正在运行的应用程序,我们所编写的java程序,就是一个应用程序
什么是线程?
案例: 迅雷下载
线程是在进程中存在的,线程可以理解为就是每一条程序的执行路径
单进程单线程: 同一时刻, 一个人 过 独木桥, (进程: 桥, 线程:人)
单进程多线程: 同一时刻,一个桥,多个人过 (进程: 桥, 线程:人)
多进程多线程: 同一时刻,多个桥, 有多个人过 (进程: 桥, 线程:人)
Thread类中的基本方法
为线程起名字
public final void setName(String name) 改变线程名称,使之与参数 name 相同
public final String getName()返回该线程的名称
构造方法:
public Thread(String name) 分配新的 Thread 对象
---------------------------------------------------------
线程使用的注意事项:
几个小问题:
1, 线程有默认的名字吗? 有的话 是什么? 有什么样的规则?
有,
Thread-编号,编号从0开始数
2,为什么要重写run()方法??
为了指定每个线程要执行的操作
3, 启动线程使用的是那个方法? run()和start()方法的区别
start();
run();
start(),使该线程开始执行;Java 虚拟机调用该线程的 run 方法
run(), 只是用来指定每个线程要做的事情,就是一个普通方法而已,不能启动线程
4,线程能不能多次启动
指示线程没有处于请求操作所要求的适当状态时抛出的异常
IllegalThreadStateException
--------------------------------------------
Thread类的方法
返回对当前正在执行的线程对象的引用。
public static Thread currentThread()
设置和获取线程优先级
public final int getPriority()
public final void setPriority(int newPriority)
IllegalArgumentException 出现 向方法传递了一个不合法或不正确的参数
IllegalArgumentException - 如果优先级不在 MIN_PRIORITY 到 MAX_PRIORITY 范围内。
public static final int MAX_PRIORITY 10 最大优先级
public static final int MIN_PRIORITY 1 最小优先级
public static final int NORM_PRIORITY 5 默认优先级
线程休眠
public static void sleep(long millis) 参数为毫秒值
让当前线程休眠指定的时间后,再继续运行
线程加入
public final void join()
等待该线程终止, 其他线程要等该线程执行完毕后 才能执行
线程礼让
public static void yield()
让其他线程获取CPU执行权, 让其他线程运行
后台线程(守护线程)
public final void setDaemon(Daemon(boolean on)
后台线程是用来守护当前线程的, 一旦当前线程结束,守护线程跟着一起结束
中断线程
public final void stop()
强迫线程停止执行
public void interrupt()
中断线程。
如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方法,
或者该类的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法过程中受阻,
则其中断状态将被清除,它还将收到一个 InterruptedException。
InterruptedException: 中断异常
在线程启动以后。
如果线程正在等待wait()、休眠sleep()或占用状态join(),且这个时候,调用了interrupt()方法,该线程会被中断,抛出该异常