下面的内容都是从java编程思想一书中摘取出来,我认为很有产考价值,并且便于后续使用。

主要内容是记录继承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的更多相关文章

  1. java 线程池 使用实例

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  2. 11 java 线程池 使用实例

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  3. [Java基础] Java线程复习笔记

    先说说线程和进程,现代操作系统几乎无一例外地采用进程的概念,进程之间基本上可以认为是相互独立的,共享的资源非常少.线程可以认为是轻量级的进 程,充分地利用线程可以使得同一个进程中执行多种任务.Java ...

  4. Java线程基础实例

    概述 Java线程是一个在实战开发中经常使用的基础功能,而在Java中线程相关的类在java.lang和java.util.concurrent里 Thread package thread.base ...

  5. (转)java线程安全问题之静态变量、实例变量、局部变量

    java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编程实践>中所说: 写道 给线程安全下定义比较困难.存在很多种定义,如 ...

  6. java线程安全问题之静态变量、实例变量、局部变量

    java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编程实践>中所说: 写道 给线程安全下定义比较困难.存在很多种定义,如 ...

  7. java线程间通信1--简单实例

    线程通信 一.线程间通信的条件 1.两个以上的线程访问同一块内存 2.线程同步,关键字 synchronized 二.线程间通信主要涉及的方法 wait(); ----> 用于阻塞进程 noti ...

  8. Java线程并发:知识点

    Java线程并发:知识点   发布:一个对象是使它能够被当前范围之外的代码所引用: 常见形式:将对象的的引用存储到公共静态域:非私有方法中返回引用:发布内部类实例,包含引用.   逃逸:在对象尚未准备 ...

  9. Java线程的概念

    1.      计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行:当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了. 缓 ...

  10. java线程与并发(一)

    有好几个月没写博客了,各种破事儿忙完,决定继续写博客,恰好最近想了解下有关Java并发的一些知识,所以就准备这一段时间,用零碎的时间多记录一点有关并发的知识.希望这次能一直坚持下去. 想了解并发,必须 ...

随机推荐

  1. JDK 动态代理的简单理解

    动态代理 代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理.过滤.事后处理等服务,动态代理及通过反射机制动态实现代理机制.JDK 中的 java.lang.refl ...

  2. Vue项目开发之打包后背景图片路径错误的坑

    在开发vue项目的过程中,使用浏览器进行预览的时候所有图片的路径是没有任何问题的,但是在打包后传到服务器上,在微信端查看背景图片时,background的图片竟然不显示,img标签里的图片却是正常展示 ...

  3. ARM 汇编与C调用的若干问题(一般函数调用情况)

    ARM 汇编与C之间的函数调用需要符合ATPCS,建议函数的形参不超过4个,如果形参个数少于或等于4,则形参由R0,R1,R2,R3四个寄存器进行传递:若形参个数大于4,大于4的部分必须通过堆栈进行传 ...

  4. Android 开源库获取途径整理

    介绍眼下收藏 Android 开源库比較多的 GitHub 项目.站点.Twitter.App 及怎样获取最新的 Android 开源库. 微信号: 1. GitHub Android 开源项目汇总 ...

  5. struts2中ognl标签具体解释

    <body> <s:set name="age" value="61" /> <!-- if elseif else 參数test ...

  6. Why I don’t read books

    http://dougmccune.com/blog/2007/03/23/why-i-dont-read-books/ I’ve never read a programming book. I r ...

  7. XPath and TXmlDocument

    XML example, from the OmniXML XPath demo: <?xml version="1.0" encoding="UTF-8" ...

  8. Java File.separator

    在Windows下的路径分隔符和Linux下的路径分隔符是不一样的,当直接使用绝对路径时,跨平台会暴出“No such file or diretory”的异常. 比如说要在temp目录下建立一个te ...

  9. DroidGap

    import com.phonegap.DroidGap;       import android.app.Activity;   import android.os.Bundle;       p ...

  10. HTML5+Java(Spring下) 拍照上传图片

    使用支持html5的浏览器,找个有摄像头,再建一个文件接收base64字串的图片然后保存就哦了 <html> <head runat="ReYo-Server"& ...