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 的指点!
相关文档:
1.如何学习程序设计?
JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用。为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的精髓,自然能够做到一通百通。如 ......
正则表达式是字符串处理的终极武器,本文以一个具体题目简介java对正则表达式的支持。
题目:将一个字符串中的形如href=“XXXX”和src=“XXXX”的部分取出,打印。
处理正则表达式主要用到java.util.regex.Matcher和java.util.regex.Pattern两个类。
\\测试用的字符串
String source= "...href=\" ......
(1)根据xml文件来管理线程池的最大最小线程数
(2)对线程池通过Timer定期扫描以防止线程未激活;
(3)通过某一个变量(本程序中是freeThreadCount)来得到空闲线程的数目;
一、配置xml(listen.xml)是:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<Con ......
1、首先安装JDK(如安装在C:\Program Files\Java\jdk1.6.0)
2、设置系统环境参数:
1)右击“我的电脑”,选“属性”。
2)选择“高级”选项卡,点击“环境变量”按钮
3)点击系统变量内的“新建&rd ......