一、线程池的应用:
public class TestThread implements Runnable {
private String name;
public TestThread(String name) {
this.name = name;
}
@Override
public void run() {
try {
Thread.sleep(1000 * 3);
} catch (Exception ex) {
}
System.out.println("正在执行:" + this.name);
}
}
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPool {
public static void main(String[] args) {
// 创建一个可重用固定线程数的线程池
ExecutorService pool = Executors.newFixedThreadPool(1);
// 创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口
for (int i = 0; i < 20; i++) {
TestThread t1 = new TestThread(i + "");
// 将线程放入池中进行执行
pool.execute(t1);
}
// 关闭线程池
pool.shutdown();
}
}
二、线程的应用:
public class ThreadDemo{
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("正在执行:" + i);
}
}
}.start();
}}
三、委托的应用:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public abstract class Delegator implements InvocationHandler {
protected Object obj_orgin = null; // 原始对象
protected Object obj_proxy = null; // 代理对象
public Delegator() {
}
public Delegator(Object orgin) {
this.createProxy(orgin);
}
/*
* 完成原始对象和委托对象的实例化
*
* @param orgin 原始对象实例
*/
protected Object createProxy(Object orgin) {
obj_orgin = orgin;
// 下面语句中orgin.getClass().getClassLoader()为加载器,orgin.getClass().getInterfaces()为接口集
obj_proxy = Proxy.newProxyInstance(orgin.getClass().getClassLoader(), orgin.getClass().getInterfaces(), this); // 委托
return obj_proxy;
}
/*
* 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法,具体请参见Java API
*
* @param args 参数
*
* @param method 方法类实例
*/
protected Object invokeSuper(Method method, Object[] args) throws Throwable {
return method.invoke(obj_orgin, args);
}
// --------------实现InvocationHandler接口,要求覆盖------------
// 下面实现的方法是当委托的类调用toString()方法时,操作其他方法而不是该类默认的toString(),这个类的其他方法则不会。
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
// 缺省实现:委托给obj_orgin完成对应的操作
if (method.getName().equals("toString")) { // 对其做额外处理
return this.invokeSuper(method, args) + "$Proxy";
} else { // 注意,调用原始对象的方法,而不是代理的(obj==obj_proxy)
return this.invokeSuper(method, args);
}
}
}
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Hashtable;
import java.util.Map;
@SuppressWarnings("rawtypes")
public class Delegator4Map extends Delegator {
//private static Log _log = LoggerFactory.getLog(Delegator4Map.class);
private Map orginClass = null; // 原始对象
private Map proxyClass = null; // 代理对象
public Map getOrgin() {
return orginClass;
}
public Map getProxy() {
return proxyClass;
}
public Delegator4Map(Map orgin) {
super(orgin);
orginClass = orgin;
proxyClass = (Map) super.obj_proxy;
}
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
if (method.getName().equals("size")) { // 修改size处理逻辑
Object res2 = new Integer(-1);
System.out.println("调用委托的方法");
return res2;
} else {
System.out.println("调用原始的方法");
return super.invoke(obj, method, args);
}
}
public static void main(String[] args) throws IOException {
Delegator4Map rtm = new Delegator4Map(new Hashtable());
Map m = rtm.getProxy();
m.size();
}
}
分享到:
相关推荐
他是一个多线程应用的例。多初学者来说是个不错的选择
委托 线程 事件 非常好的说明事例!!
qt中的线程事例,简单易懂的线程函数,在qt下使用线程
Java 高并发多线程编程系列案例代码 & 教程 & 面试题集锦! !! 包括但不限于线程安全性, atomic包下相关类、CAS原理、Unsafe类、synchronized关键字等的使用及注意事项,
Java多线程同步具体实例讲解 .doc
C# 多线程开发源码事例 WINFORM
java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200
比较简单一个多线程事例,学习哦
该程序利用WaitForMultipleObjects函数实现了线程的安全退出。
java类的描述和使用,讲述了一段java代码的类的构成。
java2 教程和事例
java 泛型基础简单事例
java Log4j 事例和讲解 基本功能全讲解 与文档配合使用更有效果哦!
JAVA实验举例和事例 可以让初学者学习
Java发牌程序事例设计模式Java发牌程序事例设计模式Java发牌程序事例设计模式Java发牌程序事例设计模式Java发牌程序事例设计模式
JAVA 正则表达式 事例
java Socket心跳事例
C#委托可以看做是方法引用,或者叫方法指针,它和c++中使用的函数指针最大的区别就是委托是类型安全的。 委托声明时必须将方法的返回值和详细的参数列表列出来,这样在为委托指定方法时,可以进行类型安全的检查。
该事例说明了在 C# winform 多线程 应用与资源互调
如何在java中调用mysql的存储过程的事例-how Calling mysql storage process stories