多线程常用方法类 sleep与wait 线程同步 interrupt() 守护线程等

1.sleep与wait的区别

sleep() 方法正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往下执行

wait 方法可以中断线程的执行,使本线程等待,让出cpu资源,使其他线程得到该资源运行。

如果这时使用 notify() 方法,则通知该线程结束等待(注意:notify的作用相当于叫醒睡着的人,而并不会给他分配任务,就是说notify只是让之前调用wait的线程有权利重新参与线程的调度
如果这时使用 notifyAll() 方法,曾中断的线程就会从中断处继续执行线程

2.线程同步synchronized

当一个线程A使用synchronized方法时,其他线程想使用这个synchronized方法就必须等待,直到该线程使用完synchronized方法

package 线程同步synchronized;

public class Synchronized implements Runnable {
	public static void main(String[] args) {
		new Thread(new Synchronized(),"小美").start();
		new Thread(new Synchronized(),"小绿").start();
	}
	@Override
	public void run() {
		test();
		
	}
	public static  synchronized void test() {// synchronized方法
		for (int i = 0; i <5; i++) {
			System.out.println(Thread.currentThread().getName()+"当前数字"+i);
		}
	}

}

在这里插入图片描述

3.interrupt()

interrupt()常用来吵醒休眠的线程。当一些线程调用sleep()方法处于休眠时,一个占有cpu资源的线程可以让休眠的线程调用interrupt()方法“吵醒自己”,及导致休眠的线程发生interruptedException异常,从而结束休眠

4.线程联合 join()

一个线程A在占有cpu资源期间,可以让其他资源调用join()和本线程联合,如:
B.join();
党A在运行期间联合了B,A线程立即中断执行,一直等到他联合的B线程执行完毕,A线程再重新排队等待CPU资源。

5.守护线程setDaemon()

thread.setdeamon(true);
将一个线程设为守护线程

该方法需要线程启动前执行(即写在thread.start()前面)

当程序中所有用户线程结束时,及时守护线程的run方法还有需要执行的一些语句,守护线程也立即结束

package 守护线程;

public class deamon implements Runnable{
public static void main(String[] args) {

	Thread thread =new Thread(new deamon(),"小王");
	thread.setDaemon(true);
	thread.start();
	System.out.println("定");//主线程
}
	@Override
public void run() {
test();
	
}
public static void test() {
	for (int i = 1; i <= 500; i++) {
		System.out.println(Thread.currentThread().getName()+i+Thread.currentThread().isDaemon());
	}
}

}
在这里插入图片描述

6.yield()

yield 礼让线程,暂停线程 直接进入就绪状态不是阻塞状态(cpu重新分配资源)

发布了27 篇原创文章 · 获赞 5 · 访问量 639

猜你喜欢

转载自blog.csdn.net/qq_44620773/article/details/104167480