1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java学习笔记 --- 多线程(多线程的控制)

java学习笔记 --- 多线程(多线程的控制)

时间:2018-10-31 10:28:56

相关推荐

java学习笔记 --- 多线程(多线程的控制)

1、线程休眠

public static void sleep(long millis)

public class ThreadSleep extends Thread {@Overridepublic void run() {for (int x = 0; x < 100; x++) {System.out.println(getName() + ":" + x + ",日期:" + new Date());// 睡眠// 困了,我稍微休息1秒钟try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}/** 线程休眠* public static void sleep(long millis)*/public class ThreadSleepDemo {public static void main(String[] args) {ThreadSleep ts1 = new ThreadSleep();ThreadSleep ts2 = new ThreadSleep();ThreadSleep ts3 = new ThreadSleep();ts1.setName("林青霞");ts2.setName("林志玲");ts3.setName("林志颖");ts1.start();ts2.start();ts3.start();}}

2 、加入线程:加入进来的线程执行结束后才执行其他线程

public final void join():等待该线程终止,才执行其他线程

public class ThreadJoin extends Thread {@Overridepublic void run() {for (int x = 0; x < 100; x++) {System.out.println(getName() + ":" + x);}}}/** public final void join():等待该线程终止。 */public class ThreadJoinDemo {public static void main(String[] args) {ThreadJoin tj1 = new ThreadJoin();ThreadJoin tj2 = new ThreadJoin();ThreadJoin tj3 = new ThreadJoin();tj1.setName("李渊");tj2.setName("李世民");tj3.setName("李元霸");//先执行完"李渊"在执行其他线程 tj1.start();try {tj1.join();} catch (InterruptedException e) {e.printStackTrace();}tj2.start();tj3.start();}}

3、礼让线程:暂停当前正在执行的线程对象,并执行其他线程。

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

让多个线程的执行更和谐,但是不能靠它保证一人一次。

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

//调用礼让线程方法 Thread.yield();}}}/** public static void yield():暂停当前正在执行的线程对象,并执行其他线程。 * 让多个线程的执行更和谐,但是不能靠它保证一人一次。*/public class ThreadYieldDemo {public static void main(String[] args) {ThreadYield ty1 = new ThreadYield();ThreadYield ty2 = new ThreadYield();ty1.setName("线程1");ty2.setName("线程2");ty1.start();ty2.start();}}

4、后台线程(守护线程):主线程结束后,守护线程也会跟着终止

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

守护线程和一般线程的区别:

1、守护线程就是main同生共死,当main退出,它将终止,而普通线程是在任务执行结束才停止。

2、Java虚拟机在它所有非守护线程已经离开后自动离开。守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。

public class ThreadDaemon extends Thread {@Overridepublic void run() {for (int x = 0; x < 100; x++) {System.out.println(getName() + ":" + x);}}}/** public final void setDaemon(boolean on):将该线程标记为守护线程或用户线程。* 当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。 * * 游戏:坦克大战。*/public class ThreadDaemonDemo {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 x = 0; x < 5; x++) {System.out.println(Thread.currentThread().getName() + ":" + x);}}}

5、终止线程

public final void stop():让线程停止,过时了,但是还可以使用。

public void interrupt():中断线程。 把线程的状态终止,并抛出一个InterruptedException。

public class ThreadStop extends Thread {@Overridepublic void run() {System.out.println("开始执行:" + new Date());// 我要休息10秒钟,亲,不要打扰我哦try {Thread.sleep(10000);} catch (InterruptedException e) {// e.printStackTrace();System.out.println("线程被终止了");}System.out.println("结束执行:" + new Date());}}/** public final void stop():让线程停止,过时了,但是还可以使用。* public void interrupt():中断线程。 把线程的状态终止,并抛出一个InterruptedException。*/public class ThreadStopDemo {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();}}}

6、线程的优先级设置

线程默认优先级是5。

线程优先级的范围是:1-10。

线程优先级高仅仅表示线程获取的 CPU时间片的几率高,但是要在次数比较多,或者多次运行的时候才能看到比较好的效果。

设置线程优先级的方法:

public final int getPriority():返回线程对象的优先级

public final void setPriority(int newPriority):更改线程的优先级

IllegalArgumentException:非法参数异常。

抛出的异常表明向方法传递了一个不合法或不正确的参数

public class ThreadPriority extends Thread {@Overridepublic void run() {for (int x = 0; x < 100; x++) {System.out.println(getName() + ":" + x);}}}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("林平之");// 获取默认优先级,线程的默认优先级为5// System.out.println(tp1.getPriority());// System.out.println(tp2.getPriority());// System.out.println(tp3.getPriority());// 设置线程优先级,错误:线程的优先级范围:1-10// tp1.setPriority(100000);//设置正确的线程优先级tp1.setPriority(10);tp2.setPriority(1);tp1.start();tp2.start();tp3.start();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。