易截截图软件、单文件、免安装、纯绿色、仅160KB

Java 小例子:线程同步例子:三个学生取水

三个学生到一个水龙头下排队取水,三人都取完水后一起离开。
这里涉及到如何判断三个人都取完水。如果用普通的静态成员,势必会要用无限循环来等待。更好的办法是用 wait-notify 机制。前两个学生取完水后都 wait,最后一个学生取完水后 notify,这样就能一起离开了。下面是代码示例:
/**
* 三个学生排队取水,取完后一起离开
*
* @author yiding.he
*/
public class SyncDemo_FetchingWater {

private static final ValueLock water = new ValueLock();

public static void main(String[] args) {
String[] student_names = {"甲", "乙", "丙"};

for (String student_name : student_names) {
new Student(student_name).start();
}
}

// 学生
private static class Student extends Thread {

private String name;

private Student(String name) {
this.name = name;
}

@Override
public void run() {
try {
synchronized (water) {
Thread.sleep(1000);

System.out.println("学生" + name + "取完了水。");
water.value++;

if (water.value == 3) {
System.out.println("三个人都取完了水。");
water.notifyAll(); // 只要执行了这个,学生们都会离开。
} else {
water.wait(); // 同时释放了锁,下一个线程进入
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("学生" + name + "离开了。");
}
}

// 带值的锁
private static class ValueLock {

public int value;
}
}
感谢 bendanlzh 的指点!


相关文档:

JAVA(高级)工程师

一、JAVA。要想成为JAVA(高级)工程师肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA(高级)工程师,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其 ......

Java递归、非递归实现二叉树遍历

最近找工作做笔试题发现很重要,就自己写了一点,和大家分享
import java.util.Stack;
import java.util.HashMap;
public class BinTree {
private char date;
private BinTree lchild;
private BinTree rchild;
public BinTree(char c) {
date = c;
}
// 先序遍历递归
public static void preOrder(Bi ......

java调用exe或者bat文件

 import java.io.*;
public class TestExe {
    public static void main(String[] args) throws InterruptedException {
 try {
   Process child = Runtime.getRuntime().exec("C://Program Files//Sunyard//ImageInput//ImageInput.exe");
   child.waitFor();
&n ......

JAVA程序员面试32问

第一,谈谈final, finally, finalize的区别。
final 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以 ......

java 插入数据到 mysql 乱码 最佳解决

 手动建表:
CREATE TABLE `excel` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `passwd` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;  注意是gb2312
然后在连接数据库时加上:
useUnicode=true&characterEncoding=gb2312.
就ok啦! ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号