內部類在線程使用上的幾個小小的編碼技巧

註釋等思考明天再加哈,《不拖延的心理學》收穫良多,先把它看完java

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();
			
		}
	}
}
相關文章
相關標籤/搜索