易截截图软件、单文件、免安装、纯绿色、仅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 的指点!


相关文档:

sql 2005 存储过程分页 java 代码

 create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',         
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列 ......

Java NIO API详解

 
Java NIO API详解
在JDK
1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API。对于大多数应用来说,这样的API使用很方
便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从JDK 1.4起,NIO
API作为一个基于缓冲区,并能提供非阻塞(non-blo ......

java Socket编程基础

 最简单的服务器接受单用户请求的socket编程模型,代码写得不好,只是用来阐明意思
 client side
import java.net.*;
import java.util.*;
import java.io.*;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
tr ......

Java编程菜鸟课程:状态对象

这是一个实战中非常重要但是容易被忽视的概念,说它重要,是因为它比Datcbase重要;说它容易被忽视也是同样的原因,它经常被Datcbase概念替代。
  如果你经验和经历中没有状态这个概念,极端地说:可能你的java编程编程Sys经验还未积累到一定程度,状态是每个java编程编程程式员深入java编程编程Sys后必然碰到的问题。
......

java dnd

dnd是drag and drop的缩写.
java中的dnd主要涉及到3个类:TransferHandler(用来处理数据的拖放过程),Transferable(用来包装拖放的数据),和DataFlavor(用来表示拖放的数据的类型).下面来介绍这3个类的方法
1.javax.swing.TransferHandler
它有两个构造函数:
TransferHandler() 子类的便捷构造方法。
TransferHandler(St ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号