Java线程:线程的交互
Java线程:线程的交互
SCJP5学习笔记
线程交互是比较复杂的问题,SCJP要求不很基础:给定一个场景,编写代码来恰当使用等待、通知和通知所有线程。
一、线程交互的基础知识
SCJP所要求的线程交互知识点需要从java.lang.Object的类的三个方法来学习:
void notify()
唤醒在此对象监视器上等待的单个线程。
void notifyAll()
唤醒在此对象监视器上等待的所有线程。
void wait()
导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
当然,wait()还有另外两个重载方法:
void wait(long timeout)
导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。
void wait(long timeout, int nanos)
导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。
以上这些方法是帮助线程传递线程关心的时间状态。
关于等待/通知,要记住的关键点是:
必须从同步环境内调用wait()、notify()、notifyAll()方法。线程不能调用对象上等待或通知的方法,除非它拥有那个对象的锁。
wait()、notify()、notifyAll()都是Object的实例方法。与每个对象具有锁一样,每个对象可以有一个线程列表,他们等待来自该信号(通知)。线程通过执行对象上的wait()方法获得这个等待列表。从那时候起,它不再执行任何其他指令,直到调用对象的notify()方法为止。如果多个线程在同一个对象上等待,则将只选择一个线程(不保证以何种顺序)继续执行。如果没有线程等待,则不采取任何特殊操作。
下面看个例子就明白了:
/**
* 计算输出其他线程锁计算的数据
*
* @author leizhimin 2008-9-15 13:20:38
*/
public class ThreadA {
public static void main(String[] args) {
ThreadB b = new
相关文档:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
package mypakage;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; ......
commons-digester.jar
Digester基于规则的XML文档解析,主要用于XML到Java对象的映射.
commons-beanutils.jar
提供对Java 反射和自省API的包装.
aspectjweaver.jar
用于在Spring 2.0中集成AspectJ AspectJ LTW织入器
ognl.jar
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(E ......
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class JavaBasic {
public static void main(String[] args){
StringBuffer sd = new StringBuffer();
String hhhString="adlkll";
&nbs ......
1. Java读取Excel方式对比
在Java中读写MS Excel文件主要有两种典型的方法
l Java-To-Com的方式:
(1) jCom
(2) Jacob
l 直接Excel文件读写
(3) jExcel
(4)&nbs ......