java--线程认识与实例记录 NO.1
2013-11-14 15:41
393 查看
下面的内容都是从java编程思想一书中摘取出来,我认为很有产考价值,并且便于后续使用。
主要内容是记录继承thread和实现runnable接口两种方式的代码用法,及内部类中启用线程的用法。
1、首先看下一个继承Thread类的用法,通过第13行代码,在构造方法中通过start开启线程。
然后程序执行SimpleThread类的run方法。
2、下面是一个实现Runnable接口的实例方法:
通过对比两个程序的用法上大致相同,区别在于实现接口的类可以再继承其他的类。
3、基于继承thread和实现runnable接口的内部类,实现方式:
截图说明:
主要内容是记录继承thread和实现runnable接口两种方式的代码用法,及内部类中启用线程的用法。
1、首先看下一个继承Thread类的用法,通过第13行代码,在构造方法中通过start开启线程。
然后程序执行SimpleThread类的run方法。
package concurrency; //: concurrency/SimpleThread.java // Inheriting directly from the Thread class. public class SimpleThread extends Thread { private int countDown = 5; private static int threadCount = 0; public SimpleThread() { // Store the thread name: super(Integer.toString(++threadCount)); start(); } public String toString() { return "#" + getName() + "(" + countDown + "), "; } public void run() { while (true) { System.out.print(this); if (--countDown == 0) return; } } public static void main(String[] args) { for (int i = 0; i < 5; i++) new SimpleThread(); } }
2、下面是一个实现Runnable接口的实例方法:
通过对比两个程序的用法上大致相同,区别在于实现接口的类可以再继承其他的类。
package concurrency; //: concurrency/SelfManaged.java // A Runnable containing its own driver Thread. public class SelfManaged implements Runnable { private int countDown = 5; private Thread t = new Thread(this); public SelfManaged() { t.start(); } public String toString() { return Thread.currentThread().getName() + "(" + countDown + "), "; } public void run() { while (true) { System.out.print(this); if (--countDown == 0) return; } } public static void main(String[] args) { for (int i = 0; i < 5; i++) new SelfManaged(); } }
3、基于继承thread和实现runnable接口的内部类,实现方式:
package concurrency; //: concurrency/ThreadVariations.java // Creating threads with inner classes. import java.util.concurrent.*; import static net.mindview.util.Print.*; // Using a named inner class: 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) { print(this); if (--countDown == 0) return; sleep(10); } } catch (InterruptedException e) { print("interrupted"); } } public String toString() { return getName() + ": " + countDown; } } public InnerThread1(String name) { inner = new Inner(name); } } // Using an anonymous inner class: class InnerThread2 { private int countDown = 5; private Thread t; public InnerThread2(String name) { t = new Thread(name) { public void run() { try { while (true) { print(this); if (--countDown == 0) return; sleep(10); } } catch (InterruptedException e) { print("sleep() interrupted"); } } public String toString() { return getName() + ": " + countDown; } }; t.start(); } } // Using a named Runnable implementation: 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) { print(this); if (--countDown == 0) return; TimeUnit.MILLISECONDS.sleep(10); } } catch (InterruptedException e) { print("sleep() interrupted"); } } public String toString() { return t.getName() + ": " + countDown; } } public InnerRunnable1(String name) { inner = new Inner(name); } } // Using an anonymous Runnable implementation: class InnerRunnable2 { private int countDown = 5; private Thread t; public InnerRunnable2(String name) { t = new Thread(new Runnable() { public void run() { try { while (true) { print(this); if (--countDown == 0) return; TimeUnit.MILLISECONDS.sleep(10); } } catch (InterruptedException e) { print("sleep() interrupted"); } } public String toString() { return Thread.currentThread().getName() + ": " + countDown; } }, name); t.start(); } } // A separate method to run some code as a task: 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) { print(this); if (--countDown == 0) return; sleep(10); } } catch (InterruptedException e) { print("sleep() 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").runTask(); } } /* (Execute to see output) */// :~
截图说明:
相关文章推荐
- java--线程认识与实例记录 NO.1
- Java实现在不同线程中运行的代码实例
- java线程安全问题之静态变量、实例变量、局部变量
- 从头认识java-18.2 基本的线程机制(6)-使用构造器或者内部类来实现多线程的编码变体
- Java语言多线程终止中的守护线程实例
- Java的四种线程初步认识
- Java:线程安全之静态变量、实例变量、局部变量
- Java 线程实例讲解综述
- java线程互斥实例
- JAVA线程的应用实例(运用2种中断线程方式,基于实现进度条为例)
- Java线程技术点与实例
- Java 线程实例讲解综述
- 并发编程学习总结(一) :java 创建线程的三种方式的优缺点和实例
- java线程安全问题之静态变量、实例变量、局部变量
- java记录—线程
- Java实例说明 100个线程同时向一个银行账户中存入1元钱,在没有使用同步机制和使用同步机制情况下的执行情况
- java 从零开始,学习笔记之基础入门<线程及实例分析>(十九)
- JAVA线程实例-----卖票
- Java 线程实例讲解综述
- java线程安全问题之静态变量、实例变量、局部变量