ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Java学习笔记十一(多线程)

Java学习笔记十一(多线程) 概念进程多款软件同时执行每个软件占用1个进程线程同一个软件内执行可开启多线程同时执行多个任务多线程并发1个cpu交替执行。A线程执行B线程等待多线程并行多个cpu同时执行。A线程B线程同时执行需要CPU有多核处理器例8核CPU需要执行9个线程任务。线程1~线程8同时执行(线程9等待)线程1~线程pu8同时执行叫并行。线程8等待线程9执行线程8与线程9两个线程交替执行叫并发。1 创建线程1.1 Thread类(1) 创建线程类public class 类名extendsThread{// 单继承不利于程序扩展(2) 重写run方法public voidrun() {…}(3) 执行start开启Thread th new 线程类();th.start();1.2 Runnable接口(1) 创建实现类public class 类名implementsRunnable{(2) 实现run方法public voidrun() {…}(3) 执行start开启:类 tar new 类();Thread th new Thread(tar);th.start();1.3 Callable接口注释可获取返回值(1) 创建实现类public class 类名implementsCallable返回值类型{// 可返回线程执行结果(2) 重写call方法public返回值类型call(){…}// 相当于runnabel的run方法(3) 执行start开启Callable返回值类型 c new 线程类(); FutureTask返回值类型 f new FutureTask返回值类型(c); Thread th new Thread(f); th.start();(4) 获取返回值结果返回值类型 值 f.get()// 需要处理异常同步等待线程执行结束后获取结果2 线程函数2.1 通用函数(1) 使当前线程睡眠Thread.sleep(long)// 1000毫米单位sleep会释放CPU资源但是不会释放锁(2) 获取当前线程对象Thread t Thread.currentThread();(3) 获取线程名String threadName t.getName();(4) 修改线程名t.setName(String name);(5) 优先执行线程对象t.join([毫秒]);// 优先执行t线程t线程执行完再执行join()后代码(6) 优先级getPrioritysetPriority(1~10);// 设置线程优先级 1最小10最大默认52.2 同步代码块函数注释只能在同步方法同步代码块执行(1) 线程等待t.wait([毫米]);// 使自己等待释放锁(2) 随机唤醒其它等待线程t.notify();// 一般需要先唤醒其它(等待计时等待)线程再使自己等待(3) 唤醒全部其它等待线程t.notifyAll();// 所有等待线程竞争锁3 线程安全注释也叫线程同步3.1 同步代码块同步锁synchronized// 锁对象其它对象可正常执行适用于只操作对象全局变量场景不影响其它对象内属性的读取与更改锁字节码类.class执行当前类的其它线程都需要等待适用于读取或变更线程类全局变量的场景防止其它线程同时更改public class 类 { public void fn() { synchronized(对象或this) { 处理… } //判断对象是否有锁获得锁的线程才能执行 } //锁对象避免不同对象处理等待 public static void fn2() { synchronized(字符串或类.class) { 处理… } //锁同一个对象或字节码文件 } }3.2 同步方法(1) 同步方法publicsynchronizedvoid fn(){ 处理… }// 相当于this对象锁同对象的该方法只有一个线程可执行(2) 同步静态方法publicstaticsynchronizedvoid fn4(){...}// 相当于class字节码文件锁该方法只有一个线程可执行3.3 Lock锁手动加锁解锁public class 类 { private final Lock lock new ReentrantLock(); public void fn5(){ lock.lock(); // 加锁 处理… lock.unlock(); // 解锁 } }3.4 线程生命周期注释线程生命周期不包含正在执行状态(1) 新建 Thread.State.NEW// new 线程对象()(2) 可运行 Thread.State.RUNNABLE// 就绪_执行了start()(3) 阻塞 Thread.State.BLOCKED// 未得到锁(4) 无限等待Thread.State.WAITING// 执行了wait()(5) 计时等待Thread.State.TIMED_WAITING// 执行了sleep(纳秒), wait(纳秒)(6) 终止 Thread.State.TERMINATED// 正常或异常终了3.5 线程执行流程注释线程1线程2线程3同时执行多数情况下线程3执行快。Thread.sleep不会释放锁。
返回列表