内部类在线程使用上的几个小小的编码技巧

本文通过示例代码展示了Java中创建线程的多种方式,包括继承Thread类、实现Runnable接口以及使用匿名内部类等。每种方式都有其特点和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注释等思考明天再加哈,《不拖延的心理学》收获良多,先把它看完

import java.util.concurrent.TimeUnit;

public class ThreadInner {

	public static void main(String[] args) {
		new InnerThread1("innerthread1");
		new InnerThread2("innerthread2");
		new InnerRunnable1("innerRunnable1");
		new InnerRunnable2("innerRunnable2");
		new ThreadMethod("threadmethod").runTask();
	}
}

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) {
				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) {
					System.out.println("sleep() interrupted"); 
				}
			}
			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.MICROSECONDS.sleep(10);
				}
			} catch(InterruptedException e) {
				System.out.println("sleep() interrupted");
			}
		}
		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.MICROSECONDS.sleep(10);
					}
				} catch(InterruptedException e) {
					System.out.println("sleep interrupted");
				}
			}
			public String toString(){
				//return Thread.currentThread().getName() + ": " +countDown;
				return t.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 runTask() {
		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("sleep() interrupted"); 
					} 
				}
				public String toString() {
					return getName() + ": " + countDown;
				}
			};
			t.start();
			
		}
	}
}

 

转载于:https://my.oschina.net/u/3008297/blog/800394

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值