Java Semaphore
package test;
/**
*
* @author openpk
*/
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class Main {
public static void main(String[] args) {
// 线程池
ExecutorService exec = Executors.newCachedThreadPool();
// 只能5个线程同时访问
final Semaphore semp = new Semaphore(1);
// 模拟20个客户端访问
for (int index = 0; index < 10; index++) {
final int NO = index;
Runnable run = new Runnable() {
public void run() {
try {
// 获取许可
semp.acquire();
System.out.println("Accessing: " + NO);
for(int i=0;i<400;i++)
System.out.print("Accessing: " + NO+" "+i);
System.out.println("");
Thread.sleep((long) (Math.random() * 10000));
// 访问完后,释放
semp.release();
} catch (InterruptedException e) {
}
}
};
exec.execute(run);
}
exec.shutdown();
}
}
// 退出线程池
相关文档:
Java的跨平台是通过Java虚拟机(JVM)来实现的。
Java源文件的编译过程
Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码—字节码。这一编译过 ......
首先java接口和抽象类代表的就是抽象类型,就是我们需要提出抽象层的具体实现,如果要提高程序的复用率,可维护性,可扩展性,就必须面向接口和抽象编程,正确使用他们。 (1)抽象类可以提供实现方法,接口不能
这是抽象类的唯一优点,而且非常有用,例如,你定义一个接口,子类不需要他的所有方法,可是你没办法不去 ......
总是忘记java读写文件的代码具体怎么写,写了一个记录如下
String filename="mydict.txt";
File file=new File(filename);
//read file
if(file.exists())
{
try
{
BufferedReader br=new BufferedReader(new FileReader(file));
String temp=null;
while((temp=br.readLine())!=null) ......
原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?boardid=12&id=140292
* 最近因为开发活动需要,用上了Eclipse,并要求使用精简版的SQL数据库(即SQL Server 2005)来进行开发项目 *
1.准备工作: 准备相关的软件(Eclipse除外,开源软件可以从官网下载)
<1> .Microsoft   ......
众所周知,在Java多线程编程中,一个非常重要的方面就是线程的同步问题。
关于线程的同步,一般有以下解决方法:
1.
在需要同步的方法的方法签名中加入synchronized关键字。
2.
使用synchronized块对需要进行同步的代码段进行同步。
3. 使用JDK
5中提供的java.util.concurrent.lock包中的Lock对象。 ......