`
anoxic
  • 浏览: 1575 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

java中简单的线程和委托事例

    博客分类:
  • java
阅读更多
一、线程池的应用:

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();
}

}


分享到:
评论

相关推荐

    java多线程的应用事例

    在Java中,线程间通信是通过共享内存(变量)和同步机制(如synchronized关键字、wait/notify机制)来实现的。例如,如果这个示例是银行转账操作,那么两个线程分别代表不同的账户,它们需要在修改余额时进行同步,...

    C# 委托 线程 事件的事例代码

    在C#编程中,委托、线程和事件是三个核心概念,它们对于构建高效、响应式的多任务应用程序至关重要。下面将详细阐述这三个概念及其相互之间的关系,并通过一个实例代码进行说明。 1. 委托(Delegate): 委托在C#中...

    c#一个简单的线程实例 委托控制控件

    压缩包中的“c#一个简单的线程事例代码”文件很可能是包含一个简单示例项目,包括一个窗体,一个按钮,以及当按钮被点击时启动线程并使用委托更新UI的代码。 总结来说,这个实例将教我们如何在C#中创建线程,以及...

    Java多线程同步具体实例讲解 .doc

    在Java中,为了保证线程安全,避免数据竞争和不一致的状态,我们通常会使用同步机制来控制对共享资源的访问。本文将通过一个具体的售票系统实例来深入解析Java中的线程同步。 首先,我们要了解Java中的关键字`...

    多线程程序事例

    本示例程序以“多线程程序事例”为主题,通过使用Windows API中的`WaitForMultipleObjects`函数来确保线程的安全退出,从而避免了资源泄露和其他潜在的问题。 多线程允许程序同时执行多个独立的任务,提高系统的...

    Java 高并发多线程编程系列案例代码

    Java 高并发多线程编程系列案例代码 & 教程 & 面试题集锦! !! 包括但不限于线程安全性, atomic包下相关类、CAS原理、Unsafe类、synchronized关键字等的使用及注意事项,

    C# 多线程开发源码事例

    在C#编程中,多线程技术是一种关键的性能优化手段,它允许程序同时执行多个独立的任务,从而提高系统的效率和响应性。本资源“C# 多线程开发源码事例”聚焦于如何在WINFORM应用中实现多线程操作。WINFORM是.NET ...

    qt中的线程事例

    本文将深入探讨Qt中的线程概念、如何创建和管理线程,以及如何在实际应用中使用线程。 首先,让我们理解什么是线程。线程是程序执行的最小单元,每个线程都有自己的程序计数器、系统寄存器和栈。在单个进程中,可以...

    bcb 简单多线程事例

    总的来说,"Bcb简单多线程事例"是一个很好的起点,通过实践这个示例,我们可以深入理解如何在Bcb中创建和管理线程,以及如何利用线程提高程序的性能。随着经验的积累,你将能够更熟练地应对复杂的多线程问题,如线程...

    java2 教程和事例

    6. **异常处理**:Java中的异常处理机制使得程序能优雅地处理错误情况,通过try-catch-finally块捕获和处理异常。 7. **输入输出流**:Java的I/O流系统支持读写文件、网络通信等各种数据传输。理解流的概念以及...

    Jni多线程同步事例

    在Java编程中,JNI(Java Native Interface)是一个关键特性,允许Java代码和其他语言写的代码进行交互。JNI在处理性能敏感的代码或者利用特定硬件功能时非常有用。在本例“Jni多线程同步事例”中,我们将探讨如何在...

    java 编程事例 1200

    java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200java 编程事例 1200

    java类的事例

    java类的描述和使用,讲述了一段java代码的类的构成。

    JAVA实验举例和事例

    - Java中的变量用于存储不同类型的数据。 - 常见的数据类型包括:整型(`int`)、浮点型(`float`、`double`)、字符型(`char`)等。 - 示例代码: ```java int age = 20; double height = 1.75; char ...

    C#多线程整合事例程序

    在C#编程中,多线程是一个核心概念,它允许应用程序同时执行多个任务,从而提高系统效率和响应性。这个“C#多线程整合事例程序”很可能包含了一系列示例,展示了如何在C#环境中有效地利用多线程技术。 在C#中,多...

    经典 Socket 多线程事例

    在学习这个实例时,你将有机会接触到Java的`java.net.Socket`和`java.net.ServerSocket`类,以及多线程相关的`java.lang.Thread`或`java.util.concurrent`包中的线程池。你还需要理解如何正确地管理线程资源,避免...

    java中hello的事例

    下面我们将详细讨论Java中的"Hello, World!"实例,以及它背后的原理。 首先,我们需要了解Java程序的基本结构。Java程序由一个或多个类(Class)组成,每个类可以包含方法(Method)和变量(Field)。在"Hello, ...

    java事例

    在Java中,包(package)是一种将相关类和接口进行逻辑分组的方式,便于管理和重用代码。"com"通常是商业组织或公司的顶级包名,例如,"com.example"可能代表一个名为"example"的公司的代码库。 在Java编程中,学习...

    java Socket心跳事例

    在这个“java Socket心跳事例”中,我们将会深入探讨如何使用Java的Socket编程来实现心跳机制,这是一种确保连接可靠性和有效性的常见策略。 心跳机制的基本思想是,两个通信端点定期交换信息,以确认连接仍然有效...

    java事例集合1

    【描述】中的"事例集合1(转载)"表明这些内容可能来源于网络,可能是某个开发者或教育者收集并整理的Java编程实例,目的是帮助学习者通过实际操作来理解Java编程。而"看韩剧www.pigkrtv.com"这部分看起来像是无关的...

Global site tag (gtag.js) - Google Analytics