一个使用了队列的通用实现:
http://blog.csdn.net/chaosllgao/archive/2009/05/23/4211183.aspx
此文描述了一种更简单的模型
1. 同时只有1个生产者和1个消费者
2. 不用队列,同时只有一个产品
3. 生产者每次生产1个0到100之间的随机数,消费者则把该随机数打印出来。如果产生的随机数为0,则生产者、消费者均退出运行
import java.util.Random;
public class ProducerConsumer
{
public static void main(String[] args)
{
Product product = new Product();
Producer producer = new Producer(product);
Consumer consumer = new Consumer(product);
producer.start();
consumer.start();
}
private static class Product
{
public int value = -1; ......
有人反映看不到源码,发现是CSDN的代码控件有问题。希望CSDN好好改进一下。
暂时先以文本方式发布出来,格式会变样。
import java.util.LinkedList;
public class ProducerConsumer
{
/**
* @param args
*/
public static void main(String[] args)
{
Queue queue = new Queue();
Producer producer1 = new Producer(queue, "producer1");
Producer producer2 = new Producer(queue, "producer2");
Consumer consumer1 = new Consumer(queue, "consumer1");
Consumer consumer2 = new Consumer(queue, "consumer2");
Consumer consumer3 = new Consumer(queue, "consumer3");
producer1.start();
producer2.start();
consumer1.start();
consumer2.start();
consumer3.start();
}
}
class Message
{
public static int sno = 0;
public int id = 0;
public String content = null;
......
转自 http://blog.csdn.net/foamflower/archive/2009/10/29/4744862.aspx
像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,附加一些WLS要用的头信息。这种情况下,直接用request.getRemoteAddr()
是无法取到真正的客户IP的。
实际的iisforward附加头如下:
WL-Proxy-Client-IP=211.161.1.239
Proxy-Client-IP=211.161.1.239
X-Forwarded-For=211.161.1.239
WL-Proxy-Client-Keysize=
WL-Proxy-Client-Secretkeysize=
X-WebLogic-Request-ClusterInfo=true
X-WebLogic-KeepAliveSecs=30
X-WebLogic-Force-JVMID=-327089098
WL-Proxy-SSL=false
综上,正确作法如下:
private String getIpAddr() {
String ipAddress = null;
//ipAddress = this.getRequest().getRemoteAddr();
ipAddress = this.getRequest().getHeader("x-forwarded-for");
if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = this.getRequ ......
String 与 StringBuffer区别:
String字符串对象是不可变的;StringBuffer是变长和可写的动态字符序列,可以自动地增加空间。
Integer var = new Integer();//有语法错误
Integer var = new Integer(2);//是对的
java的Vector成员是要用elementAt(i)成员函数来获得的,不能用ve[i]得到。
Vector::public Enumeration<E> elements() 返回此向量的组件的枚举。
Vector v = new Vector();
v.add("aaaaaaaa");
v.add("bbbbbbbbbbbb");
for (Enumeration e = v.elements(); e.hasMoreElements();)
{
System.out.println(e.nextElement());
}
//输出
//aaaaaaaa
//bbbbbbbbbbbb
byte类型是有带符号的,即有正负的,是一个字节的,char是两个字节,无正负的,char c = 'a'; ......
import java.io.*;
class FileTest
{
public static void main(String[] args) throws Exception
{
//File f=new File("1.txt");
//f.createNewFile();
//f.mkdir();
//File f=new File("E:\\JavaLesson\\Lesson7\\1.txt");//在Windows系统下,用绝对路径下创建文件,用\\,\+字母是用于
转义字符
//f.createNewFile();
//线程睡眠三秒钟
File fDir=new File(File.separator);
String strFile="JavaLesson"+File.separator+"Lesson6";
File f=new File(fDir,strFile);
String[] names=f.list(new FilenameFilter()//得到以上文件夹下所有的文件名和目录名,存储在names数组中
//接口还可以这样实现
{
public boolean accept(File dir,String name)
{
return name.indexOf(".java")!=-1;
}
});
for(int i=0;i<names.length;i++)
{
& ......
String 与 StringBuffer区别:
String字符串对象是不可变的;StringBuffer是变长和可写的动态字符序列,可以自动地增加空间。
Integer var = new Integer();//有语法错误
Integer var = new Integer(2);//是对的
java的Vector成员是要用elementAt(i)成员函数来获得的,不能用ve[i]得到。
Vector::public Enumeration<E> elements() 返回此向量的组件的枚举。
Vector v = new Vector();
v.add("aaaaaaaa");
v.add("bbbbbbbbbbbb");
for (Enumeration e = v.elements(); e.hasMoreElements();)
{
System.out.println(e.nextElement());
}
//输出
//aaaaaaaa
//bbbbbbbbbbbb
接口的实现:FilenameFilter是接口
String[] names=f.list(new FilenameFilter()//得到以上文件夹下所有的文件名和目录名,存储在names数组中
{
public boolean accept(File dir,String name)
{
return name.indexOf(".java")!=-1;
}
});
getClass().getName();
java中,子 ......