五种内部类形式将线程隐藏于类中

1.使用普通内部类继承Thread类

public class ThreadTestOne {

    private int countDown = 5;
    private Inner inner;
    private class Inner extends Thread{

        Inner(String name){
            super(name);
            start();
        }

        public void run(){
            while(true){
                System.out.println(this);
                if(--countDown == 0)
                    return;
                try{
                    sleep(10);
                }catch(InterruptedException e){
                    throw new RuntimeException(e);
                }
            }
        }

        public String toString(){
            return "#"+getName()+":"+countDown;
        }
    }

    public ThreadTestOne(String name){
        inner = new Inner(name);
    }

}

2.使用匿名内部类构造Thread类,重写run()方法

public class ThreadTestTwo {

    private int countDown = 5;
    private Thread t;

    public ThreadTestTwo(String name){
        t = new Thread(name){
            public void run(){
                while(true){
                    System.out.println(this);
                    if(--countDown == 0)
                        return;
                    try{
                        sleep(10);
                    }catch(InterruptedException e){
                        throw new RuntimeException(e);
                    }
                }
            }

            public String toString(){
                return "#"+getName()+":"+countDown;
            }
        };
        t.start();
    }
}

3.使用普通内部类实现Runnable类

public class RunnableTestOne {
    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(){
            while(true){
                System.out.println(this);
                if(--countDown == 0)
                    return;
                try{
                    Thread.sleep(10);
                }catch(InterruptedException e){
                    throw new RuntimeException(e);
                }
            }
        }

        public String toString(){
            return "#"+Thread.currentThread().getName()+":"+countDown;
        }
    }

    public RunnableTestOne(String name){
        inner = new Inner(name);
    }
}

4.使用匿名内部类构造Thread类,参数1构造一个Runnable对象,参数2指明线程名称

public class RunnableTestTwo {

    private int countDown = 5;
    private Thread t;

    public RunnableTestTwo(String name){
        t = new Thread(new Runnable(){

            public void run(){
                while(true){
                    System.out.println(this);
                    if(--countDown == 0)
                        return;
                    try{
                        Thread.sleep(10);
                    }catch(InterruptedException e){
                        throw new RuntimeException(e);
                    }
                }
            }

            public String toString(){
                return "#"+Thread.currentThread().getName()+":"+countDown;
            }
        },name);
        t.start();
    }
}

5.使用局部内部类,即在方法内部构造Thread类,重写run()方法

public class ThreadMethod {

    private int countDown = 5;
    private Thread t;
    private String name;

    public ThreadMethod(String name){
        this.name = name;
    }

    public void runThread(){
        if(t == null){
            t = new Thread(name){

                public void run(){

                    while(true){
                        System.out.println(this);
                        if(--countDown == 0)
                            return;
                        try{
                            sleep(10);
                        }catch(InterruptedException e){
                            throw new RuntimeException(e);
                        }
                    }
                }

                public String toString(){
                    return "#"+getName()+":"+countDown;
                }
            };
            t.start();
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-02 07:00:55

五种内部类形式将线程隐藏于类中的相关文章

java 内部类来将线程 代码隐藏在类中

package org.rui.thread.basic; import java.util.concurrent.TimeUnit; /** * 有时通过使用内部类来将线程 代码隐藏在类中 将会很有用,就像下面这样: * ----- * InnerThread1创建了一个扩展自thread的匿名内部类,并且在构造器中创建了这个内部类的一个实例. * 如果内部类具有你在其他方法中需要访问的特殊能力 (新方法) * 那这么做将会很有意义.但是,在大多数时候,创建线程的原因只是为了使用thread的

汇编32位寄存器和地址编号的五种书写形式

32位通用寄存器 32位:EAX   EBX  ECX   EDX  ESP  EBP   ESI  EDI  每个寄存器的最大宽度是32位 16位:AX       BX     CX    DX   SP     BP    SI     DI 8位   :AL     BL   CL      DL    AH    BH    CH    DH 想寄存器存一个数字可以用mov指令 mov eax,1  就是把1存到eax寄存器中 程序内存 一个32位的程序最大存储空间是4G 就是从0~0

第十五周oj刷题—— Problem C: 矩形类中运算符重载【C++】

Description 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. 两个矩形相加的规则是:决定矩形的对应坐标分别相加,如 左下角(1,2),右上角(3,4)的矩形,与 左下角(2,3),右上角(4,5)的矩形相加,得到的矩形是 左下角(3,5),右上角(7,9)的矩形. 这个规则没有几何意义,就这么定义好了. 输出面积的功能通过重载"<<&quo

Android中Button的五种监听事件

简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activity本身作为事件监听器,实现onClickListener5.外部类作为监听器 ButtonListenerActivity.class public class ButtonListenerActivity extends AppCompatActivity implements View.On

Github项目解析(九)--&gt;实现Activity跳转动画的五种方式

转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了在Activity启动过程中获取组件宽高的五种方式.在Activity的启动过程中如果我们直接在生命周期方法中通过view.getWidth()或者是view.getHeight()方法获取组件的宽度和高度其结果都是0,为什么会出现这个问题呢? 其实看过我以前写过的Activity启动流程  Activity布局加载流程  Activity布局绘制流程  的同学应该对Activity的启动流程和其布局加载绘制流程不陌生,Activity的启动

五种方式让你在java中读取properties文件内容不再是难题

一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC+Mybatis整合开发的项目中通过java程序读取properties文件内容的方式进行了梳理和分析,先和大家共享. 二.项目环境介绍 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Id

C#继承机制 访问与隐藏基类成员

(1) 访问基类成员 通过base 关键字访问基类的成员:   调用基类上已被其他方法重写的方法.  指定创建派生类实例时应调用的基类构造函数.  基类访问只能在构造函数.实例方法或实例属性访问器中进行. 从静态方法中使用 base 关键字是错误的. 示例:下面程序中基类 Person 和派生类 Employee 都有一个名为 Getinfo 的方法.通过使用 base 关键字,可以从派生类中调用基类上的 Getinfo 方法. using System ;public class Person

【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类

内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规类功能更加强大. 2.内部类可以对同一个包中的其他类隐藏起来,不过可以通过 OuterClass.InnerClass来引用public声明的内部类. 局部内部类: 1.内部类挪到方法内部,与内部类相比,局部内部类不仅可以访问定义他们的外部类,还可以并且仅可以访问声明为final的局部变量. 2.类

类中属性返回形式(对象,关联数组,索引数组)

class A { public $x, $y; function __construct($x, $y)  { $this->x = $x; $this->y = $y; } function get_value($arr = true)  { if($arr == 'arr')   { // 类中属性以关联数组形式转换返回 return get_object_vars($this); }else if($arr == 'obj')   { //类中属性以对象形式返回 return $thi