线程的对象方法

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() 

用来设置线程是否成为守护线程和判断线程是否是守护线程。

欢迎批评指正,提出问题,谢谢!

以上是关于线程的对象方法的主要内容,如果未能解决你的问题,请参考以下文章

活动到片段方法调用带有进度条的线程

多线程 Thread 线程同步 synchronized

你如何在片段中膨胀动态创建的对象?

并发包java.util.concurrent.locks.Lock

newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段

是否需要锁定阅读对象?