java线程(二)

114 阅读2分钟

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」 @[toc]

四.线程方法

①Thread的对象方法
public void start()
public void run()
public final void setPriority(int priority)更改线程的优先级。
public final void setName(String name)改变线程名称,使之与参数 name 相同。
public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程
public final void join(long millisec)等待该线程终止的时间最长为 millis 毫秒
public void interrupt()中断线程
public final boolean isAlive()测试线程是否处于活动状态。
②Thread的静态方法
public static void yield()暂停当前正在执行的线程对象,并执行其他线程。
public static void sleep(long millisec)在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
public static boolean holdsLock(Object x)当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。
public static Thread currentThread()返回对当前正在执行的线程对象的引用。
public static void dumpStack()将当前线程的堆栈跟踪打印至标准错误流。

五.线程池

线程池是为了提高由于频繁创建线程而大大降低的系统效率,如果并发的线程很多,并且每个线程都执行了一个时间很短的任务就结束了,因为频繁创建线程和销毁线程需要时间,线程池使线程可以复用,就是执行完一个任务不被销毁,继续执行其他的任务。

①.继承实现

从最核心的ThreadPoolExecutor类开始,ThreadPoolExecutor继承于AbstractExecutorService抽象类,

AbstractExecutorService抽象类实现了ExecutorService接口,ExecutorService实现了Executor接口,

Executor中定义了关键方法:

void execute(Runnable command);

ExecutorService接口中新定义了很多方法:

void shutdown();
List<Runnable> shutdownNow();
boolean isShutdown();
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);

AbstractExecutorService抽象类中实现了ExecutorService接口中的submit的不同参数的三个方法,

并且新加入了一些方法

ThreadPoolExecutor类中,直接使用的父类(AbstractExecutorService)的方法,未复写submit(),但是实现了shutdown(),shutdownNow(),execute(..);

submit()方法根本上也是使用execute(..)方法去执行线程的。submit()方法会有一个Future接口类型的返回值;

public void shutdown() {}
public List<Runnable> shutdownNow(){}
public void execute(Runnable command){}

/*
*submit()方法(其一)
*/
public Future<?> submit(Runnable task) {
        if (task == null) throw new NullPointerException();
        RunnableFuture<Void> ftask = newTaskFor(task, null);
        execute(ftask);
        return ftask;
    }

未完待续。。