JAVA and C++版信号量(PV操作)
import java.util.concurrent.Semaphore;
/**
* 抽象任务,具体的执行任务,归实现类负责
*
* @author Administrator
*
*/
public abstract class Task {
public abstract void run();
private Semaphore s;
private boolean hasExisted = false;
public void P(final Semaphore s) throws InterruptedException {
if (s == null) { // 申请空的信号量
throw new InterruptedException("不能为空");
}
if (hasExisted) {// 已经申请了一个资源,还没有释放
throw new InterruptedException("已经占用一个资源");
}
s.acquire();// 阻塞
this.s = s;
hasExisted = true;
}
public boolean V() {
if (!hasExisted) {
return false;// 没沾有资源就不能说释放了
}
s.release();//释放资源
hasExisted = false;
s = null;
return true;
}
}
import java.util.concurrent.Semaphore;
/**
* 用信号量实现互斥
*
* @author Administrator
*
*/
public class Mutex extends Semaphore {
private static final long serialVersionUID = 1L;
public Mutex() {
super(1);//互斥是1
}
} import java.util.concurrent.Semaphore;
public class Test {
public static void main(String[] args) {
// final Semaphore s = new Semaphore(2);//信号量,执行结果run the task1 run the
// task2 run the task3
final Semaphore s = new Mutex();// 互斥 run the task1 run the task2 run
// the task3
new Thread() {
public void run() {
Task1 task2 = new Task1();
try {
task2.P(s);// 申请资源
task2.run();// 执行任务
task2.V();// 释放资源
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
new Thread() {
public void run() {
Task2 task2 = new Task2();
try {
task2.P(s);
task2.run();
task2.V();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
new Thread() {
public void run() {
Task3 task2 = new Task3();
try {
task2.P(s);
task2.run();
task2.V();
} catch (InterruptedException e)
相关文档:
DateTimeHelper 时间组件
/**
*
*/
package com.ibm08001.bbs.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
*/
public class DateTimeHelper {
private static SimpleDateFormat FULL_SDF = new SimpleDateFormat ......
1 作用域
java中作用域的范围由花括号标示。
2关于static
垃圾收集器只知道搜集那些有new运算符分配的内存,不知道如何释放特殊内存。
如果垃圾收集器准备回收对象的内存,它首先调用finalize(),而且只有在下一次垃圾搜集过程中,才会真正回收对象的内存。所以说如果使用
final ......
多线程是java的一个优势,java使得程序员可以很方便的进行多线程程序开发。获得更好的性能。
关于多线程的概念以及一般的多线程编程,比如如何以及为何实现runnable接口,为何stop()会被Deprecated掉等等,这个请看matrix之前的多线程编程基础或者sun的java文档。
关于多线程编程,有几点这里要提到的:
1。既然stop( ......
import java.io.*;
public class CaiPiao {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str;
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in ......
最近初步接触了下Java加密和数字签名的相关内容,我学习的过程大概分五步:
1)消息摘要
2)私钥加密
3)公钥加密
4)数字签名
5)数字证书
下面的代码是第五部分:数字证书
比起前四部分,这部分就稍微麻烦点了,我想我有必要给刚刚接触数字证书的朋友们,把在本地跑通下面代码的前提说一下:
1此例是对&l ......