JAVA多线程使用简介(一)

126 阅读2分钟

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

线程

java开发中,多线程时一个绕不开的话题,下面我们来介绍下java线程的一些基本操作和尝试用的线程类。

1.run()和start()的区别

  1. start:用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。
  2. run:run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

2.使用匿名类创建线程

如果一个对象只是用一次,可以使用匿名。

例如:

//创建实现类对象
StartRun st = new StartRun();
//创建代理类
Thread t = new Thread(sr);
//启动
t.start();

如果使用匿名类,则可以简化为:

new Thread(new StartRun()).start();

3.Thread类、Runnable接和Callable接口

推荐使用Runnable接口,好处是:

  1. 接口可以实现多个,突破单继承。

  2. 便于共享资源。因为一个线程只能启动一次,通过Thread实现线程时,线程和线程所要执行的任务是捆绑在一起的。而一个任务可以启动多个线程,通过Runnable方式实现的线程,实际是开辟一个线程,将任务传递进去,由此线程执行。

  3. Callable接口 Callable接口用于juc并发编程

  • Callable规定的方法是call(),而Runnable规定的方法是run()。
  • Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
  • call()方法可抛出异常,而run()方法是不能抛出异常的。
  • 运行Callable任务可拿到一个Future对象。

Future
Callable任务返回Future对象。即:Callable和Future一个产生结果,一个拿到结果。Future 表示异步计算的结果。

4.守护线程

守护线程只为用户线程服务,JVM不用等待守护线程结束才结束。而JVM默认会等用户线程结束才会结束。