java 基础

java基础(七)-线程

2018-09-01  本文已影响0人  NullPoint3Exce

实现线程的方式:

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();是不接受任务以外的其他任务列表;

上一篇 下一篇

猜你喜欢

热点阅读