线程调度与线程控制

/**

  • 获取默认优先级
  • 默认优先级为5
  • 注意:
  • 线程优先级范围是1-10
    
  • public final int getPriority()返回对象的优先级
  • 如何设置线程对象的优先级呢?
  • public final void setPriority(int newPriority)//更改线程优先级

*/
//线程的调度
public class ThreadPriorityDemo {
public static void main(String[] args) {
ThreadPriority tp1=new ThreadPriority();
ThreadPriority tp2=new ThreadPriority();
ThreadPriority tp3=new ThreadPriority();
tp1.setName(“小康”);
tp2.setName(“小溪”);
tp3.setName(“小程”);
//获取默认优先级
// System.out.println(tp1.getPriority());//5
// System.out.println(tp2.getPriority());//5
// System.out.println(tp3.getPriority());//5

// //设置线程优先级
tp1.setPriority(4);
tp2.setPriority(7);
tp3.setPriority(6);
System.out.println(tp1.getPriority());//4
System.out.println(tp2.getPriority());//5
System.out.println(tp3.getPriority());//6

	  tp1.start();
	  tp2.start();
	  tp3.start();
}

}

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

/**

  • 休眠线程
  • public static void sleep(millis)

*/
public class ThreadSleepDemo {
public static void main(String[] args) {
ThreadSleep tp1=new ThreadSleep();
ThreadSleep tp2=new ThreadSleep();
ThreadSleep tp3=new ThreadSleep();
tp1.setName(“小康”);
tp2.setName(“小溪”);
tp3.setName(“小程”);
tp1.start();
tp2.start();
tp3.start();
}

}

class ThreadSleep extends Thread
{
public void run() {
for(int x=0;x<10;x++) {
System.out.println(getName()+"—"+x);
//睡眠
//相当于困了我要休息一分钟
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

/**

  • 加入线程
  • public static void join();//等待该线程终止,该线程终止后才执行下一线程

*/

public class ThreadJoinDemo {
public static void main(String[] args) {
ThreadJoin tp1=new ThreadJoin();
ThreadJoin tp2=new ThreadJoin();
ThreadJoin tp3=new ThreadJoin();
tp1.setName(“李渊”);
tp2.setName(“李世明”);
tp3.setName(“李元霸”);
tp1.start();
try {
tp1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tp2.start();
tp3.start();
}

}

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

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

  • 这只是让线程在一定的程度上执行的更和谐一些,但并不能靠他(你一次我一次)这种样式执行

*/

public class ThreadYieldDemo {
public static void main(String[] args) {
//创建线程
ThreadYield tp1=new ThreadYield();
ThreadYield tp2=new ThreadYield();
tp1.setName(“李大”);
tp2.setName(“李二”);
tp1.start();
tp2.start();
}
}

class ThreadYield extends Thread
{
public void run() {
for(int x=0;x<100;x++) {
System.out.println(getName()+"—"+x);
Thread.yield();
}
}
}

守护线程

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

  • 当正在运行的线程都是守护线程时,Java 虚拟机退出。

  • 该方法必须在启动线程前调用。

  • 守护线程我可以用一个例子来更直观的表达它,比如历史上的张飞关羽刘备

  • 张飞关羽(线程tp1和线程tp2执行100次)就是守护刘备(主线程执行5次)的,当刘备死去(主线程终止)

  • 张飞关羽就没有了守护目标就会自杀(举例不必太较真),也就是它们所代表的线程也就会终止,但是他们在得到刘备死

  • 去消息之前还会继续活(线程继续执行一段时间)一小段时间这就是有时候会看到主线程终止后,次线程还会执行一小段

*/

public class ThreadDaemonDemo {
public static void main(String[] args) {
//创建线程
ThreadDaemon tp1=new ThreadDaemon();
ThreadDaemon tp2=new ThreadDaemon();
tp1.setName(“张飞”);
tp2.setName(“关羽”);
//设置守护线程
tp1.setDaemon(true);
tp2.setDaemon(true);
tp1.start();
tp2.start();
//主线程执行
Thread.currentThread().setName(“刘备”);
for(int x=0;x<5;x++) {
System.out.println(Thread.currentThread().getName()+":"+x);
}
}
}

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

中断线程

  • public final void stop() 让线程停止,但该方法过时,但是还可以使用
  • 但该方法太暴力,只要一终止,后面还有的一堆代码就都不能使用
  • 我们一般使用
  • public void interrupt():中断线程,把线程的状态终止,并抛出一个 InterruptException

*/

import java.util.Date;

public class ThreadStopDemo {
public static void main(String[] args) {
//创建线程
ThreadStop tp1=new ThreadStop();
tp1.start();
//设置三秒醒过来,不然就中断线程
try {
Thread.sleep(3000);
tp1.interrupt();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

class ThreadStop extends Thread
{
public void run() {
System.out.println(“开始执行:”+new Date());
//休息10秒,亲,不要打扰我
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println(“线程被终止了”);
}
System.out.println(“结束执行:”+new Date());
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值