文章目录
JAVA线程的实现方式
一.继承Thread类
继承Thread类,
使用:重写run方法,thread.start()方法开启线程并执行run()方法。
二.实现Runnable接口
返回值为void,
使用:重写run()方法,使用方法是将runnable实现类对象传进Tread内作为参数,使用start()方法开启线程并执行run()方法。
三.Callable、Future和FutureTask
①Callable
返回值为 T 泛型,可以抛出异常
使用:重写call()方法,
②Future
一般与ExecutorService es = Executors.newCachedThreadPool(); 线程池一起用
一般与ExecutorService es = Executors.newCachedThreadPool(); 线程池一起用<https://blog.csdn.net/a779363384/article/details/120874709?spm=1001.2014.3001.5502>[线程池地址]
Future future = es.submit();
ExecutorService:
Future<T> submit(Callable<T> task);
Future<T> submit(Runnable task , T result);
Future<?> submit(Runnable task);
```
Future future = es.submit();
ExecutorService:
Future<T> submit(Callable<T> task);
Future<T> submit(Runnable task , T result);
Future<?> submit(Runnable task);
Future:
void get()方法会保证线程在执行完之前是阻塞的
void get(Long timeout , TimeUnit unit)方法会保证线程在规定时间前是阻塞的
boolean isDone() :如果任务执行结束,无论是正常结束或是中途取消还是发生异常,都返回true。
boolean isCancelled() :如果任务完成前被取消,则返回true。
boolean cancel(boolean mayInterruptRunning) :如果任务还没开始,执行cancel(...)方法将返回false;如果任务已经启动,执行cancel(true)方法将以中断执行此任务线程的方式来试图停止任务,如果停止成功,返回true;当任务已经启动,执行cancel(false)方法将不会对正在执行的任务线程产生影响(让线 程正常执行到完成),此时返回false;当任务已经完成,执行cancel(...)方法将返回false。mayInterruptRunning参数表示是否中断执行中的线程。
Future只是一个接口,我们不能直接创建对象
使用:
与线程池搭配使用
Future future = es.submit();
③FutureTask
FutureTask是Future的实现类,
FutureTask<T> implements RunnableFuture<T>
RunnableFuture<T> extends Runnable, Future<V>
看到其实FutureTask是Future,Runnable的实现类
使用:
与线程池一起使用
ExecutorService es = Executors.newCachedThreadPool();
FutureTask futureTask = new FutureTask<>(Callable c);
es.execute(futureTask);
使用futureTask.get();可以得到返回的执行结果
注意:FutureTask.run()不能产生新线程
四.线程方法
①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() | 将当前线程的堆栈跟踪打印至标准错误流。 |
未完待续。。