[多线程] 线程中的常用方法

您所在的位置:网站首页 多线程有什么作用 [多线程] 线程中的常用方法

[多线程] 线程中的常用方法

2024-07-02 13:07| 来源: 网络整理| 查看: 265

线程中常用的方法

1、public void start()  使该线程开始执行;Java 虚拟机调用该线程的 run 方法。

2、public void run() 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

3、public final void setName(String name) 改变线程名称,使之与参数 name 相同

4、public final void setPriority(int piority) 更改线程的优先级。

5、public final void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。

6、public final void join(long millisec) 等待该线程终止的时间最长为 millis 毫秒。

7、public void interrupt() 中断线程。

8、public final boolean isAlive() 测试线程是否处于活动状态。

9、public static void static yield() 暂停当前正在执行的线程对象,并执行其他线程。

10、public static void sleep(long millisec) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

11、public static Thread currentThread() 返回对当前正在执行的线程对象的引用。

配一张图:

 

静态方法:

1、currentThread()方法

public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); }

结果:

main

因为是在main函数中运行的,所以得到的名字是main

 

2、sleep()方法

方法sleep()的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。这个“正在执行的线程”是指this.currentThread()返回的线程。

sleep方法有两个重载版本

Thread.sleep(int millis);//参数为休眠的毫秒 Thread.sleep(int millis, int nanos);//第一个为休眠的毫秒,第二个为纳秒

sleep相当于让线程睡眠,交出CPU,让CPU去执行其他的任务。 但是有一点要非常注意,sleep方法不会释放锁,也就是说如果当前线程持有对某个对象的锁,则即使调用sleep方法,其他线程也无法访问这个对象。如:

1 /** 2 * 线程的sleep方法 3 * 4 */ 5 public class SleepMethod { 6 private int i = 10; 7 private Object object = new Object(); 8 9 public static void main(String[] args) { 10 SleepMethod sm = new SleepMethod(); 11 MyThread t1 = sm.new MyThread(); 12 MyThread t2 = sm.new MyThread(); 13 t1.start(); 14 t2.start(); 15 } 16 17 class MyThread extends Thread { 18 @Override 19 public void run() { 20 synchronized (object) { 21 i++; 22 23 try { 24 System.out.println("I:" + i); 25 System.out.println("Thread Name:" + Thread.currentThread().getName() + ",进入睡眠"); 26 Thread.sleep(1000); 27 } catch (InterruptedException e) { 28 e.printStackTrace(); 29 } 30 System.out.println("Thread Name:" + Thread.currentThread().getName() + "睡眠结束"); 31 i++; 32 System.out.println("I" + i); 33 } 34 } 35 } 36 }

运行结果为:

I:11 Thread Name:Thread-0,进入睡眠 Thread Name:Thread-0睡眠结束 I:12 I:13 Thread Name:Thread-1,进入睡眠 Thread Name:Thread-1睡眠结束 I:14

当Thread-0进入睡眠状态之后,Thread-1并没有去执行具体的任务。只有当Thread-0执行完之后,此时Thread-0释放了对象锁,Thread-1才开始执行。

 

注意,如果调用了sleep方法,必须捕获InterruptedException异常或者将该异常向上层抛出。当线程睡眠时间满后,不一定会立即得到执行,因为此时可能CPU正在执行其他的任务。所以说调用sleep方法相当于让线程进入阻塞状态。

 

3、yield()方法

调用yield方法会让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间,另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。

注意,调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态,它只需要等待重新获取CPU执行时间,这一点是和sleep方法不一样的。

1 /** 2 * yield方法 3 * 4 */ 5 public class YieldMethod { 6 class MyThread extends Thread { 7 @Override 8 public void run() { 9 10 long beginTime=System.currentTimeMillis(); 11 int count=0; 12 for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3