java线程(一)

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()将当前线程的堆栈跟踪打印至标准错误流。

未完待续。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值