zoukankan      html  css  js  c++  java
  • java多线程基本概述(十四)——Thread内部类的几种写法

    import java.util.concurrent.TimeUnit;
    
    //命名匿名类-Thread
    class InnerThread1 {
        private int countDown = 5;
        private Inner inner;
        private class Inner extends Thread{
            Inner(String name){
                super(name);
                start();
            }
    
            @Override
            public void run() {
                try {
                    while (true){
                        System.out.println(this);
                        if(--countDown==0)
                            return;
                        sleep(10);
                    }
                }catch (InterruptedException e){
                    System.out.println("interrupted");
                }
            }
    
            @Override
            public String toString() {
                return getName()+": "+countDown;
            }
        }
    
        public InnerThread1(String name){
            inner = new Inner(name);
        }
    }
    
    
    //命名内部类-Runnable
    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();
            }
    
            @Override
            public void run() {
                try {
                    while (true){
                        System.out.println(this);
                        if(--countDown==0) return;
                        TimeUnit.SECONDS.sleep(10);
                    }
                }catch (InterruptedException e){
                    System.out.println("interrupted");
                }
            }
    
            @Override
            public String toString() {
                return t.getName()+": "+countDown;
            }
        }
    
        public InnerRunnable1(String name){
            inner = new Inner(name);
        }
    }
    
    //匿名内部类-Thread
    class InnerThread2 {
        private int countDown = 5;
        public InnerThread2(final String name){
              new Thread(name){
                  @Override
                  public void run() {
                      try {
                          while (true){
                              System.out.println(this);
                              if(--countDown==0)
                                  return;
                              sleep(10);
                          }
                      }catch (InterruptedException e){
                          System.out.println("interrupted");
                      }
                  }
    
                  @Override
                  public String toString() {
                      return getName()+": "+countDown;
                  }
              }.start();
        }
    }
    
    //匿名内部类-Runnable2
    class InnerRunnable2 {
        private int countDown = 5;
        public InnerRunnable2(final String name){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        while (true){
                            System.out.println(this);
                            if(--countDown==0)
                                return;
                            TimeUnit.SECONDS.sleep(10);
                        }
                    }catch (InterruptedException e){
                        System.out.println("interrupted");
                    }
                }
    
                @Override
                public String toString() {
                    return Thread.currentThread().getName()+": "+countDown;
                }
            }, name).start();
        }
    }
    
    //a separate methid to run somoe code as task
    class ThreadMethod{
        private int countDown = 5;
        private Thread thread;
        private String name;
    
        public ThreadMethod(String name) {
            this.name = name;
        }
    
        public void runTask(){
            if (null==thread){
                new Thread(name){
                    @Override
                    public void run() {
                        try {
                            while (true){
                                System.out.println(this+"");
                                if(--countDown==0) return;
                                sleep(10);
                            }
                        }catch (InterruptedException e){
                            System.out.println("interrupted");
                        }
                    }
    
                    @Override
                    public String toString() {
                        return Thread.currentThread().getName()+": "+countDown;
                    }
                }.start();
            }
        }
    }
    
    public class Test2{
        public static void main(String[] args) {
                new InnerThread1("InnerThread1");
                new InnerRunnable1("InnerRunnable1");
                new InnerThread2("InnerThread2");
                new InnerRunnable2("InnerRunnable2");
                new ThreadMethod("ThreadMethod");
        }
    }

    输出结果:

    InnerThread1: 5
    InnerThread2: 5
    InnerRunnable1: 5
    InnerRunnable2: 5
    InnerThread1: 4
    InnerThread2: 4
    InnerThread2: 3
    InnerThread1: 3
    InnerThread1: 2
    InnerThread2: 2
    InnerThread1: 1
    InnerThread2: 1
    InnerRunnable1: 4
    InnerRunnable2: 4
    InnerRunnable1: 3
    InnerRunnable2: 3
    InnerRunnable2: 2
    InnerRunnable1: 2
    InnerRunnable2: 1
    InnerRunnable1: 1
    
    Process finished with exit code 0
  • 相关阅读:
    NSArray & NSDictionary
    copy&mutableCopy 浅拷贝(shallow copy)深拷贝 (deep copy)
    03-图形上下文栈, 图形的平移 旋转 缩放
    02- 画文字和图片-------------之前写的那个微博项目,可以试试用画图片的方式来处理,这样应该比UILabel 代码少点,一会试试
    Quartz 官网翻译(转载)
    01 画简单线的方法
    @property 修饰符
    SEL 类型
    Java 常用快捷键
    Java判断是否为数字
  • 原文地址:https://www.cnblogs.com/soar-hu/p/6734702.html
Copyright © 2011-2022 走看看