`
ren2881971
  • 浏览: 108670 次
社区版块
存档分类
最新评论

内部类实现多线程

 
阅读更多
package com.jit.test;

import java.util.concurrent.TimeUnit;

class InnerThread1 {
	private int countDown = 5;
	private Inner inner;

	private class Inner extends Thread {
		Inner(String name) {
			super(name);
			start();
		}

		public void run() {
			try {
				while (true) {
					System.out.println(this);
					if (--countDown == 0)
						return;
					sleep(10);
				}
			} catch (InterruptedException e) {
				// TODO: handle exception
				System.out.println("Interrupted");
			}
		}

		public String toString() {
			return "#" + getName() + "(" + countDown + ")";
		}
	}

	public InnerThread1(String name) {
		inner = new Inner(name);
	}
}

class InnerThread2 {
	private int countDown = 5;
	private Thread t;

	public InnerThread2(String name) {
		t = new Thread(name) {
			public void run() {
				try {
					while (true) {
						System.out.println(this);
						if (--countDown == 0)
							return;
						sleep(10);
					}
				} catch (InterruptedException e) {
					// TODO: handle exception
					System.out.println("Interrupted2");
				}
			}

			public String toString() {
				return "#" + getName() + "(" + countDown + ")";
			}
		};
		t.start();
	}
}

class InnerRunnable1 {
	private int countDown = 5;
	private Inner inner;

	private class Inner implements Runnable {
		Thread t;

		Inner(String name) {
			t = new Thread(this, name);
			t.start();
		}

		public void run() {
			try {
				while (true) {
					System.out.println(this);
					if (--countDown == 0)
						return;
					TimeUnit.MILLISECONDS.sleep(10);
				}
			} catch (InterruptedException e) {
				System.out.println("InnerRunnable");
			}
		}

		public String toString() {
			return "#" + t.getName() + "(" + countDown + ")";
		}
	}

	public InnerRunnable1(String name) {
		inner = new Inner(name);
	}

}

class InnerRunnable2 {
	private int countDown = 5;
	private Thread t;

	public InnerRunnable2(String name) {
		t = new Thread(new Runnable() {
			public void run() {
				try {
					while (true) {
						System.out.println(this);
						if (--countDown == 0)
							return;
						TimeUnit.MILLISECONDS.sleep(10);
					}
				} catch (InterruptedException e) {
					System.out.println("InnerRunnable2");
				}
			}

			public String toString() {
				return "#" + Thread.currentThread().getName() + "(" + countDown
						+ ")";
			}
		}, name);
		t.start();
	}
}
class ThreadMethod{
	private int countDown=5;
	private Thread t;
	private String name;
	public ThreadMethod(String name){
		this.name=name;
	}
	public void taskThread(){
		if(t==null){
			t=new Thread(name){
				public void run(){
					try{
						while(true){
							System.out.println(this);
							if(--countDown==0)return;
							sleep(10);
						}
					}catch(InterruptedException e){
						System.out.println("ThreadMethod Interrupted");
					}
				}
				public String toString(){
					return "#"+getName()+"("+countDown+")";
				}
			};
			t.start();
		}
	}
	}
public class ThreadVariations {

	public static void main(String[] args) {
		// new InnerThread1("InnerThread1");
		// new InnerThread2("InnerThread2")
		//new InnerRunnable1("InnerRunnable1");
		//new InnerRunnable2("InnerRunnable2");
		new ThreadMethod("ThreadMethod").taskThread();
	}
}

最近在看java编程思想 的并发。越学感觉越深奥。 看到一个内部类创建多线程的例子。
感觉不错。一直觉得内部类 是比较好玩的东西 记录下来
分享到:
评论

相关推荐

    C++类中创建多线程实现本地和远程打印

    自己随便写的一个类,实现远程和本地打印字符,控制打印等级功能!

    java中的多线程内部类实现数据共享和Runnable实现数据共享借鉴.pdf

    java中的多线程内部类实现数据共享和Runnable实现数据共享借鉴.pdf

    java中的多线程内部类实现数据共享和Runnable实现数据共享归类.pdf

    java中的多线程内部类实现数据共享和Runnable实现数据共享归类.pdf

    CESock类 多线程实现简单易用的套接字

    多线程方式实现简单易用的套接字,使用TCP协议 阻塞方式. 最大发送数据字节数不宜超过1KB. 同时实现了客户端及服务器端功能,可接收及发送数据. 版本: v1.0.0 第一版本发布时间: 20100823 第一作者: Jef ...

    易语言实现多线程安全Hook

    这个方法有一个隐患,就是在多线程中,如果一个线程暂停Hook,恰好这个函数又被另一个线程调用,则那个线程调用的是原函数!没有被Hook。本人采用的方法是写入jmp,调用原函数的时候,把原函数前几句代码拷入内存再...

    java中的匿名内部类总结

    匿名内部类可以简洁的实现多线程编程。 实例 5: Runnable 接口的匿名内部类实现 在这个例子中,我们使用匿名内部类来实现Runnable接口的run()方法。然后,我们创建了一个Thread对象,并将Runnable对象传递给它。 ...

    .Net 多线程详解

    .doc 格式 详细解析多线程技术 基础篇 • 怎样创建一个线程 • 受托管的线程与 Windows线程 • 前台线程与后台线程 • 名为BeginXXX和EndXXX的方法是做什么用的 • 异步和多线程有什么关联 WinForm多线程编程...

    原始socket实现多线程ftp上传

    1. 由于项目原因,没有使用MFC类库中封装好的Ftp类.使用原始sokcet, 多线程.上传数据. 下载由于各种原因没有测试,但代码内部流程已经实现. 2. 相信看过代码之后,对ftp协议内部流程,有更加深刻的认识

    超线程技术和粗粒度多线程技术

    超线程技术的工作原理是在处理多个线程的过程中,多线程处理器内部的每个逻辑处理器均可以单独对中断做出响应,当第一个逻辑处理器跟踪一个软件线程时,第二个逻辑处理器也开始对另外一个软件线程进行跟踪和处理。...

    java实现的多线程服务器

    包括一个公共类和一个内部类,能实现为多个客户提供连续的服务

    Delphi线程池实现多线程FTP分段下载组件

    Delphi线程池实现多线程FTP分段下载组件 by :renshouren mail:114032666@qq.com QQ:114032666 2019.10.05 使用的组件 1、TIdFTP Indy FTP客户端 2、TThreadsPool 线程池 工作原理及流程 调用本单元,将自动在程序...

    线程委托库C++源码(内置多线程浏览器实现)

    一个线程委托库的实现源码,最大的优点是实现多线程不再困难,线程同步和管理不再头疼,同时内置了浏览器线程的实现。 线程委托的概念主要是在任意线程中委托其他线程执行代码,例如调用一个API函数,或者调用一个...

    使用Java匿名内部类实现一个简单的线程池.txt

    这段代码实现了一个简单的线程池ExecutorService,其中使用了Java的匿名内部类。...这个简单的示例代码展示了如何使用Java匿名内部类来实现一个线程池的简单功能,方便了对多线程任务的管理和执行。

    用PB编写多线程应用程序

    多线程是指一个程序内部同时执行的多个流程,与单线程相比,它至少有两个方面的优点:第一,它可以更好地利用系统资源,比如CPU,若一个线程因I/O操作受阻,另一个线程仍可利用CPU来执行;第二,它更好地满足了客户...

    java多线程编程_java多线程_

    5.讲解了Timer定时器类, 其内部实现就是使用的多线程技术。 定时器的计划任 务执行是很重要的技术点, 包括在Android开发时都会有深入的使用, 所以会为读者详细 讲解。6.讲解的单例模式虽然很简单, 但如果遇到多...

    权威.NET多线程详解(源码示例)

    • 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? • Invoke,BeginInvoke干什么用的,内部是怎么实现的 • 每个线程都有消息队列吗? • 为什么Winform不允许跨线程修改UI线程控件的值 ...

    java多线程实现下载工具

    项目是运行于window/xp上的一款c/s架构的应用软件,使用URL基于tcp/ip协议来编程实现文件定位下载,通过RandomAccessFile实现文件分割,开启多线程进行加速下载,匿名内部类开启新线程实时回传下载进度给另一个新...

    多线程文件查询(delphi)

    利用delphi实现的多线程的文件查询系统,支持word内部查询。速度快。易使用。

    当析构函数遇到多线程── C++ 中线程安全的对象回调

    编写线程安全的类不是难事,用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有的互斥器来保护。如何保证即将析构对象 x 的时候,不会有另一个线程正在调用 x 的成员函数?或者说,如何保证在执行 x ...

Global site tag (gtag.js) - Google Analytics