荐,前者会产生异常,后者是强制终止,不会释放锁。 四、线程的优先级 线程的优先级代表该线程的重要程度,当有多个线程同 时处于可执行状态并等待获得CPU时间时,线程调度系统 根据各个线程的优先级来决定给谁分配CPU时间,优先级 高的线程有更大的机会获得CPU时间,优先级低的线程也 不是没有机会,只是机会要小一些罢了。 你可以调用Thread类的方法getPriority()和 setPriority()来存取线程的优先级,线程的优先级界于1 (MIN PRIORITY)和10(MAX PRIORITY)之间,缺 省是5(NORM PRIORITY)。 状态图1 状态图2
荐,前者会产生异常,后者是强制终止,不会释放锁。 四、线程的优先级 线程的优先级代表该线程的重要程度,当有多个线程同 时处于可执行状态并等待获得 CPU 时间时,线程调度系统 根据各个线程的优先级来决定给谁分配 CPU 时间,优先级 高的线程有更大的机会获得 CPU 时间,优先级低的线程也 不是没有机会,只是机会要小一些罢了。 你可以调用 Thread 类的方法 getPriority() 和 setPriority()来存取线程的优先级,线程的优先级界于 1 (MIN_PRIORITY)和 10(MAX_PRIORITY)之间,缺 省是 5(NORM_PRIORITY)。 状态图 1 状态图 2
五、线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来 方便的同时,也带来了访问冲突这个严重的问题。Java语言 提供了专门机制以解决这种冲突,有效避免了同一个数据对 象被多个线程同时访问。 我们只需针对方法提出一套机制,这套机制就是 synchronized关键字,它包括两种用法:synchronized 方法和synchronized块。 1.synchronized方法:通过在方法声明中加入 synchronized关键字来声明synchronized方法。 synchronized方法控制对类成员变量的访问:每个类实例对 应一把锁,每个synchronized方法都必须获得调用该方法 的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行, 就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞 的线程方能获得该锁,重新进入可执行状态。这种机制确保 了同一时刻对于每一个类实例,其所有声明为synchronized 的成员函数中至多只有一个处于可执行状态(因为至多只有 一个能够获得该类实例对应的锁),从而有效避免了类成员
五、线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来 方便的同时,也带来了访问冲突这个严重的问题。Java 语言 提供了专门机制以解决这种冲突,有效避免了同一个数据对 象被多个线程同时访问。 我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块。 1. synchronized 方 法 : 通 过 在 方 法 声 明 中 加 入 synchronized 关 键 字 来 声 明 synchronized 方 法 。 synchronized 方法控制对类成员变量的访问:每个类实例对 应一把锁,每个 synchronized 方法都必须获得调用该方法 的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行, 就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞 的线程方能获得该锁,重新进入可执行状态。这种机制确保 了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态(因为至多只有 一个能够获得该类实例对应的锁),从而有效避免了类成员
变量的访问冲突(只要所有可能访问类成员变量的方法均被 声明为synchronized).。 在Java中,不光是类实例,每一个类也对应一把锁, 这样我们也可将类的静态成员函数声明为synchronized,以 控制其对类的静态成员变量的访问。 synchronized方法的缺陷:若将一个大的方法声明为 synchronized将会大大影响效率,典型地,若将线程类的方 法run()声明为synchronized,由于在线程的整个生命期 内它一直在运行,因此将导致它对本类任何synchronized方 法的调用都永远不会成功。 2.synchronized块:通过synchronized关键字来声明 synchronized块。语法如下: synchronized(syncObject){ ∥允许访问控制的代码
变量的访问冲突(只要所有可能访问类成员变量的方法均被 声明为 synchronized)。 在 Java 中,不光是类实例,每一个类也对应一把锁, 这样我们也可将类的静态成员函数声明为 synchronized,以 控制其对类的静态成员变量的访问。 synchronized 方法的缺陷:若将一个大的方法声明为 synchronized 将会大大影响效率,典型地,若将线程类的方 法 run()声明为 synchronized ,由于在线程的整个生命期 内它一直在运行,因此将导致它对本类任何 synchronized 方 法的调用都永远不会成功。 2. synchronized 块:通过 synchronized 关键字来声明 synchronized 块。语法如下: synchronized(syncObject) { //允许访问控制的代码