「这是我参与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;
}
未完待续。。