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编程思想 的并发。越学感觉越深奥。 看到一个内部类创建多线程的例子。
感觉不错。一直觉得内部类 是比较好玩的东西 记录下来
分享到:
相关推荐
2. **内部类实现多线程**: - **内部类**:内部类是一种定义在另一个类内部的类,它可以访问外部类的所有成员,包括私有成员。在此案例中,`NewThread`类有一个名为`InnerThread`的私有内部类,它扩展了`Thread`类...
本篇将探讨两种在Java中实现多线程数据共享的方式:通过内部类和实现`Runnable`接口。 首先,让我们来看看如何使用`Runnable`接口实现数据共享。`Runnable`接口是Java提供的一种创建线程的方式,它允许我们将线程的...
本篇文章将深入探讨如何使用内部类来创建和管理线程,这在多线程编程中是一种常见且强大的技术。 内部类,也称为嵌套类,是在一个类的内部定义的另一个类。它们可以是静态或非静态的,每种类型都有其特定的用途。当...
在C++编程中,创建多线程是一种常见的方式,用于实现并发执行多个任务,比如这里的本地和远程打印。本示例中的代码可能涉及到以下几个关键知识点: 1. **多线程**:C++11及更高版本引入了`std::thread`库来支持线程...
Java作为多线程编程的强大语言,提供了多种创建线程的方法,其中一种是通过创建线程类来实现。本文将深入探讨如何创建线程类以及如何进行线程管理,帮助你轻松掌握这一核心技能。 首先,我们来看看如何在Java中创建...
下面我们将深入探讨如何使用Java实现多线程下载。 1. **线程基础知识**: - 线程是操作系统调度的基本单位,一个进程中可以有多个线程并发执行。 - Java提供了内置的线程支持,包括`Thread`类和`Runnable`接口,...
本文将深入探讨如何使用C语言来实现多线程文件传输。 多线程是操作系统中并发执行的多个线程,每个线程都有自己的执行路径,可以独立地执行任务。在C语言中,我们通常使用POSIX线程库(pthread库)来创建和管理线程...
在编程领域,多线程是一种常见且重要的技术,它允许程序同时执行多个任务,从而提高系统资源利用率和程序性能。本例程“pb多线程实现”旨在展示...在实际应用中,还需要结合具体编程语言和库来理解和实现多线程技术。
在Java编程语言中,实现一个多线程服务器是一项关键任务,特别是在构建高性能、高并发的网络应用时。这个“java实现的多线程服务器”项目很可能包含了一个基础的服务器框架,能够处理来自多个客户端的并发请求。下面...
这个"多线程分别下载文件"的Demo是针对在ListView或GridView控件中实现的一项功能,允许用户选择多个文件进行并行下载,并且每个文件的下载进度可以在对应的列表项中实时更新,提供良好的用户体验。 首先,我们要...
在本项目中,“JAVA多线程类QQ简单实现”是一个基于客户端-服务器架构的QQ聊天应用的简化版本,它利用了JAVA编程语言的核心特性——多线程,来处理并发的网络通信。王刚老师的“疯狂JAVA”系列教程是这个项目的灵感...
多线程方式实现简单易用的套接字,使用TCP协议 阻塞方式. 最大发送数据字节数不宜超过1KB. 同时实现了客户端及服务器端功能,可接收及发送数据. 版本: v1.0.0 第一版本发布时间: 20100823 第一作者: Jef ...
在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和高效能编程。本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。...
### CPU中断——实现多线程机制 #### 一、引言 在计算机系统中,多线程机制是一种常见的技术手段,用于提高程序的执行效率和响应能力。它允许在一个进程中同时运行多个线程,每个线程都可以独立地执行任务。为了...
在Linux环境下,C语言是一种...综上所述,"linux下c语言实现多线程web服务器"项目涵盖了操作系统、网络编程、线程管理、内存操作、并发控制等多个方面,对于理解系统级编程和Web服务的内部工作原理有着重要的实践价值。
这个方法有一个隐患,就是在多线程中,如果一个线程暂停Hook,恰好这个函数又被另一个线程调用,则那个线程调用的是原函数!没有被Hook。本人采用的方法是写入jmp,调用原函数的时候,把原函数前几句代码拷入内存再...
标题中的“用多线程实现压缩工具”表明我们要讨论的是如何利用多线程技术来提高压缩和解压缩操作的效率。在计算机编程中,多线程是一种并发执行任务的方法,可以充分利用多核处理器的计算能力,提高程序的响应速度和...
8. **并发集合类**:Java提供了并发安全的集合类,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, `BlockingQueue`等,它们内部实现了线程安全的算法,可以在多线程环境下高效使用。 9. **线程中断**:`interrupt...
本篇将深入探讨在C#中实现多线程技术及其在上位机中的应用。 一、C#多线程基础 1.1 线程概述:线程是操作系统分配CPU时间的基本单位,每个进程至少包含一个线程。多线程允许程序同时执行多个任务,提高了计算资源...