一、线程定义于组成:
1.创建任务和线程:
1 TaskThread task = new TaskThread(); // 创建任务 2 Thread taskThread = new Thread(task); // 根据任务创建对应的执行线程
2.任务 ,实现Runnable 接口
Override run()方法
1 class TaskThread implements Runnable{ 2 ... 3 public void run(){ 4 //执行体 ,告诉系统如何执行线程 5 } 6 } 7
3.执行线程的class 内,调用start()方法执行线程
1 threadtask.start() // 主程序启动线程
二、Thread类
1.方法:
1 Thread() // 创建空线程 2 Thread(task:Runnable) // 创建指定任务线程 3 start():void // 启动线程run()被jvm执行 4 isAlive():boolean // 测试当前线程是否在执行 5 join():void // 等待 线程结束 6 setPriority(p:int ):void // 设置线程优先级, 7 sleep(mills:long):void // 线程睡眠 mills毫秒 8 yield():void // 暂停当前线程并允许其他线程执行 9 interrupt():void // 中断线程
2.sleep()
sleep() 可能抛出 InterruptException 的必检异常,java里强制try/catch 必检异常。
3.线程优先级
Thread 里 定义的int常量 对应不同的优先级:
MIN_PRIORITY 代表 1;
NORM_PRIORITY 代表 5;
MAX_PRIORITY 代表 10;
Thread.NORM_PRIORITY 为主线程优先级
JVM总是执行优先级高的线程,再执行低的。当线程优先级相同时,将线程放入循环队列里,循环调度。
三、 线程池
我们对一个任务创建一个线程时用的是Thread类,而我们要为多个任务创建线程时,我们就要用到线程池
Executor接口 执行线程池内的任务
ExecutorService 是Executor 子接口
Executors类里,静态方法 newFixedThreadPool( int threadNum ) 创建Executor对象 / /在线程池创建固定数目的线程
1 import java.util.concurrent.ExecutorService; 2 import static java.util.concurrent.Executors.newFixedThreadPool; 3 public class ExecutorDemo { 4 public static void main(String []args){ 5 ExecutorService excutor = newFixedThreadPool(3); // 静态方法不用new 对象,直接调用 newFixedThreadPool() ,最大线程数为3 6 excutor.execute(new PrintChar('a',100)); // 第一个线程添加到 线程池 7 excutor.execute(new PrintChar('b',100)); 8 excutor.execute(new PrintNum(100)); 9 excutor.shutdown(); // 执行器关闭 10 } 11 }