线程的对象方法
Posted Eleanor123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程的对象方法相关的知识,希望对你有一定的参考价值。
1.start()方法
- start()方法用来启动一个线程,当调用start方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源。
2.run()方法
- run()方法不需要用来进行调用,当通过start方法启动一个线程后,当线程获得了CPU执行时间,便进入run方法去执行具体的任务。
- 继承Thread类的时候必须重写run方法,在run方法中定义具体要执行的任务。
3.getId()方法
- getId()的作用是取得线程的唯一标识。
1 package day02; 2 3 public class Threadtest02 { 4 public static void main(String[] args) { 5 Thread thread1 = Thread.currentThread(); 6 System.out.println(thread1.getId()); 7 } 8 }
执行结果:
4.isAlive()方法
- 方法isActive()的作用是检查线程是否处于活动状态。活动状态就算线程已经启动且未终止。
- 线程处于正在运行或者准备开始运行的状态,这种情况就认为线程是存活的。
1 package day02; 2 3 4 5 public class IsAliveMethod { 6 7 8 9 public static void main(String[] args) { 10 11 Thread thread1 = new IsAliveMethod().new MyThread(); 12 13 System.out.println("begin:" + thread1.isAlive()); 14 15 thread1.start(); 16 17 System.out.println("end:" + thread1.isAlive()); 18 19 20 21 } 22 23 class MyThread extends Thread { 24 25 26 27 @Override 28 29 public void run() { 30 31 System.out.println("IsAlive:" + this.isAlive()); 32 33 34 35 } 36 37 } 38 39 }
运行结果:
5、join()方法
在很多情况下,主线程创建并启动了线程,如果子线程中进行大量耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join()方法了。方法join()的作用是等待线程对象销毁。
1 package day02; 2 3 public class JoinMethod extends Thread { 4 5 6 public static void main(String[] args) { 7 8 for (int i = 1; i <= 10; i++) { 9 10 if (i == 5) { 11 12 try { 13 14 JoinMethod t1 = new JoinMethod("JoinedMethod main Thread:"); 15 16 t1.start(); 17 18 t1.join(); 19 20 21 } catch (InterruptedException e) { 22 23 e.printStackTrace(); 24 25 26 } 27 28 } 29 30 System.out.println(Thread.currentThread().getName() + ":" + i); 31 32 } 33 34 } 35 36 37 @Override 38 39 public void run() { 40 41 for (int i = 1; i <= 5; i++) { 42 43 System.out.println(getName() + ":\\t" + i); 44 45 46 } 47 48 } 49 50 51 public JoinMethod(String name) { 52 53 super(name); 54 55 56 57 } 58 59 }
运行结果:
可以看出main主线程等待joined thread线程先执行完了才结束的。如果把t1.join()这行注释掉,运行结果如下:
6、getName()和setName()
用来得到或者设置线程名称。
7、getPriority()和setPriority()
用来获取和设置线程优先级。
8、setDaemon()和isDaemon()
用来设置线程是否成为守护线程和判断线程是否是守护线程。
欢迎批评指正,提出问题,谢谢!
以上是关于线程的对象方法的主要内容,如果未能解决你的问题,请参考以下文章
并发包java.util.concurrent.locks.Lock
newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段