java语言基础(89)——多线程(线程控制)

一、线程控制之休眠线程

sleep方法可以是线程休眠指定时间

package ThreadDemo;

import java.util.Date;

public class MyThreadOne extends Thread {
  public void run(){
	  for(int i=0;i<200;i++){
		  System.out.println(getName()+" "+i+" "+ new Date());
		  try {
			// 加入了线程休眠
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			 
			e.printStackTrace();
		}
	  }
  }
}
运行上述代码,我们会发现,程序打印结果是一秒一次。这就证明了它有一秒的休眠时间。

二、线程控制之加入线程

join  加入线程类似于设置线程的优先级,但又比优先级厉害,join方法的文档是这样解释的:等待该线程终止。意思就是被调用join方法的线程,在其终止后,其它线程才可以抢占cpu

package ThreadDemo;

public class ThreadJoin extends Thread{
	public void run(){
		  for(int i=0;i<200;i++){
			  System.out.println(getName()+" "+i);
		  }
	  }
}
package ThreadDemo;

public class ThreadDemo {
 
	public static void main(String[] args) {
		ThreadJoin tj1 = new ThreadJoin();
		ThreadJoin tj2 = new ThreadJoin();
		ThreadJoin tj3 = new ThreadJoin();
		
		tj1.setName("a");
		tj2.setName("b");
		tj3.setName("c");
      
		tj1.start();
		// join方法须在start方法之后
		  try {
				tj1.join();
			} catch (InterruptedException e) {
				 
				e.printStackTrace();
			}
		tj2.start();
		tj3.start();
	  
	}

}
运行代码,我们会发现,线程a运行结束后,线程b与线程c才开始,并且是在抢占cpu

三、线程控制之礼让线程

线程礼让的效果是让多个线程的执行更和谐,更倾向于平均化。

package ThreadDemo;

public class ThreadYield extends Thread {
	public void run(){
		  for(int i=0;i<200;i++){
			  System.out.println(getName()+" "+i);
			  Thread.yield();//线程礼让
		  }
		 
	  }
}

package ThreadDemo;

public class ThreadDemo {
 
	public static void main(String[] args) {
		ThreadYield ty1 = new ThreadYield();
		ThreadYield ty2 = new ThreadYield();
		 
		
		ty1.setName("a");
		ty2.setName("b");
	 
		ty1.start();
		ty2.start();
	  
	}

}

四、线程控制之守护线程

守护线程是为主线程守护的,当主线程消失后,守护线程也将消失,当只有守护线程的时候,jvm退出。

setDaemon方法可将线程标记为守护线程,该方法须在start之前。

package ThreadDemo;

public class ThreadDaemon extends Thread {
 public void run(){
	 for(int x=0;x<100;x++){
		 System.out.println(getName()+":"+x);
	 }
 }
}
package ThreadDemo;

public class ThreadDemo {
 
	public static void main(String[] args) {
		ThreadDaemon td1 = new ThreadDaemon();
		ThreadDaemon td2 = new ThreadDaemon();
		 
		td1.setName("关羽");
		td2.setName("张飞");
		 
		td1.setDaemon(true);
		td2.setDaemon(true);
		
		td1.start();
		td2.start();
		 
		Thread.currentThread().setName("刘备");
		for(int i=0;i<5;i++){
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
	  
	}

}
运行程序我们会发现,当刘备线程结束后,张飞关羽线程也随之结束。因为张飞,关羽是刘备的守护线程。

五、线程控制之中断线程

stop() 简单粗暴,直接杀死线程

interrupt() 相当于抛出个异常,使捕获异常后面的代码执行,然后结束线程。

package ThreadDemo;

import java.util.Date;

public class ThreadStop extends Thread{
  public void run(){
	  System.out.println("开始:"+new Date());
	  try {
		Thread.sleep(5000);
	} catch (InterruptedException e) {
		 System.out.println("interrupted here");
		//e.printStackTrace();
	}
	System.out.println("结束:"+new Date());
  }
}
package ThreadDemo;

public class ThreadDemo {
 
	public static void main(String[] args) {
		ThreadStop ts = new ThreadStop();
		ts.start();
		try {
			Thread.sleep(3000);
//			ts.stop();
			ts.interrupt();//两者都可以使用,只是看自己需求如何了,它俩在结束时的处理不一样
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
	}

}



1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梧桐深院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值