美文网首页java 基础
java基础(七)-线程

java基础(七)-线程

作者: NullPoint3Exce | 来源:发表于2018-09-01 11:14 被阅读0次

    实现线程的方式:

    1.继承Thread
    2.实现Runable接口
    3.实现Callable,和Runable的区别是有回调方法。
    区别 :实现Runable接口扩展性更好,因为继承只能单向继承

    相关面试题:

    什么是线程:
    线程是操作系统运行的最小单元;进程里包含了多个线程,他们处理不同的任务,组成了一个应用或者一个系统的整体逻辑。
    Thread.yield():让步,当一个线程执行yield()方法,证明该线程执行让步,让其他线程有可能的获取资源运行。
    Thead.join(): 加入,当一个线程执行join(),证明该线程执行加入操作,会终止当前正在运行的线程,开始执行join的线程。
    Thread 优先级:Thread.currentThread().setPrority(value);value=Max_prority;Norm_priority;Min_priority;三种不同的优先等级;
    Thread.setDaemon(boolean);设置当前线程为后台线程,后台线程要在start之前调用才有效。后台线程,是指程序运行的时候在后台提供一种通用服务的线程,且这种线程并不属于程序中不可或缺的部分;只要有任何非后台线程在运行,程序就不会终止。
    sleep和wait的区别
    最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。wait 通常被用于线程间交互,sleep 通常被用于暂停执行。

    Exector(执行器)

    Exector会统一管理线程。
    newCachedThreadPool会为每一个任务创建一个线程。

    public class LifeOff implements Runnable{
        private  int countDown=10;
        private static int taskCount=0;
        private final int id=taskCount++;
        public LifeOff(int countDown) {
            this.countDown = countDown;
        }
        public LifeOff() {  }
        @Override
        public void run() {
            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
            while (countDown-->0){
                System.out.print(status());
    
                Thread.yield();//让步
            }
        }
        public String status(){
            return "#"+Thread.currentThread().getName()+"("+(countDown>0 ? countDown:"lifeoff!\n")+")";
        }
    }
    
    
      ExecutorService executor = Executors.newCachedThreadPool();
     executor.execute(new LifeOff());
     executor.shutdown();
    

    newFixedThreadPool会创建固定数量的线程来执行任务。

      ExecutorService executor = Executors.newFixedThreadPool(3);
     executor.execute(new LifeOff());
     executor.shutdown();
    

    newSingleThreadExector会创建一个线程来执行任务。如有多个任务,会排队加载任务。执行一个结束,才会处理下一个任务。

     ExecutorService executor = Executors.newSingleThreadExecutor();
      executor.execute(new LifeOff());
     executor.shutdown();
    

    executor.shutdown();是不接受任务以外的其他任务列表;

    相关文章

      网友评论

        本文标题:java基础(七)-线程

        本文链接:https://www.haomeiwen.com/subject/azgywftx.html