77范文网 - 专业文章范例文档资料分享平台

Java线程及多线程技术及应用(2)

来源:网络收集 时间:2018-11-22 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

}

}

}

if (i % 10 == 0) { }

Thread.yield();

package com.px1987.j2se.thread.StateControl; public class YieldTest { }

public static void main(String[] args) { }

Runnable r1 = new Thread5(\Runnable r2 = new Thread5(\Thread t1 = new Thread(r1); Thread t2 = new Thread(r2); t1.start(); t2.start(); try { }

catch (InterruptedException e) { }

System.out.println(\

e.printStackTrace(); Thread.sleep(2);

该程序的部分运行结果如下: S1: 20 S2: 7 S2: 8 S2: 9 S2: 10 S1: 41 S1: 42 S1: 43 S1: 44 S1: 45 S1: 46 S1: 47 S1: 48 S1: 49 S1: 50 S2: 11 S2: 12 (3)join方法

当某个(A)线程等待另一个线程(B)执行结束后,才继续执行时,使用join方法。A的 run

方法调用b.join()。下面为代码示例。

package com.px1987.j2se.thread.join; class FatherThread implements Runnable {

public void run() {

System.out.println(\爸爸想抽烟,发现烟抽完了\System.out.println(\爸爸让儿子去买包红塔山\Thread son = new Thread(new SonThread()); son.start();

System.out.println(\爸爸等儿子买烟回来\try { }

catch (InterruptedException e) {

}

package com.px1987.j2se.thread.join; class SonThread implements Runnable { }

public void run() { }

String tabs=\

System.out.println(tabs+\儿子出门去买烟\System.out.println(tabs+\儿子买烟需要10分钟\try { }

catch (InterruptedException e) { }

System.out.println(tabs+\儿子买烟回来了\

e.printStackTrace(); for (int i = 0; i < 10;) { }

Thread.sleep(1000);

System.out.println(tabs+\儿子出去第\分钟\

}

}

System.out.println(\爸爸高兴的接过烟开始抽,并把零钱给了儿子\

System.out.println(\爸爸出门去找儿子跑哪去了\System.exit(1);

//join含义:等待son线程执行完毕,father线程才继续执行 son.join();

package com.px1987.j2se.thread.join; public class JoinTest { public static void main(String[] args) { System.out.println(\爸爸和儿子的故事\

Thread father = new Thread(new FatherThread()); father.start(); // try {

// Thread.sleep(5000); // } catch (InterruptedException e) { // e.printStackTrace(); // } // father.interrupt(); } }

该程序的运行结果如下: 爸爸和儿子的故事

爸爸想抽烟,发现烟抽完了 爸爸让儿子去买包红塔山 爸爸等儿子买烟回来

儿子出门去买烟

儿子买烟需要10分钟 儿子出去第1分钟 儿子出去第2分钟 儿子出去第3分钟 儿子出去第4分钟 儿子出去第5分钟 儿子出去第6分钟 儿子出去第7分钟 儿子出去第8分钟 儿子出去第9分钟 儿子出去第10分钟 儿子买烟回来了 爸爸高兴的接过烟开始抽,并把零钱给了儿子

当时间来到儿子出去买烟的时候,Father线程调用interrupt方法就会打断son线程的正常执行,从而father线程也就不必等待son线程执行完毕再行动了,运行结果如下: 爸爸和儿子的故事

爸爸想抽烟,发现烟抽完了 爸爸让儿子去买包红塔山 爸爸等儿子买烟回来

儿子出门去买烟

儿子买烟需要10分钟 儿子出去第1分钟 儿子出去第2分钟 儿子出去第3分钟 儿子出去第4分钟 爸爸出门去找儿子跑哪去了

6.4线程的调度和优先级

1、线程的基本信息

方 法

isAlive()

getPriority() setPriority() setName() getName()

currentThread() 功 能

判断线程是否还“活”着,即线程是否还未终止。 获得线程的优先级数值 设置线程的优先级数值 给线程一个名字 取得线程的名字

取得当前正在运行的线程对象,也就是取得自己本身

2、操作线程的基本信息代码示例

package com.px1987.j2se.thread.priority; public class ThreadInfoTest { }

class MyThread implements Runnable { }

public void run() { }

for (int i = 0; i < 100; i++)

System.out.println(i);

public static void main(String[] argc) throws Exception { }

Runnable r = new MyThread();

Thread t = new Thread(r, \t.start();

System.out.println(\Thread.currentThread().sleep(5000); System.out.println(t.isAlive()); System.out.println(\

该程序的运行结果如下:

name is: Name test 0 1 2 3 . . . 97 98 99 false over!

3、线程的优先级

(1)优先级(共10级):

它们决定线程执行的先后次序(优先级高者先执行)并可以通过Thread类中的setPriority()和getPriority()方法来改变和获取优先级。典型的优先级码

? Thread.MIN_PRIORITY (1级)

? Thread.MAX_PRIORITY(10级) ? Thread.NORM_PRIORITY(5级)

(2)调度规则

Java是不支持线程时间片轮换的调度模型,而采用的是线程优先级高低的抢占调度模型。具有高优先级的线程可以抢占低优先级线程运行的机会。高优先级的线程将始终获得线程执行时间。但是这也不是绝对的,java线程调度器有可能会调用长期处于等待的线程进行执行,所以不要依靠线程的高优先级抢占模型去完成某些功能。

Java线程调度器支持不同优先级线程的抢先方式,但其本身不支持相同优先级线程的时间片轮换。但是如果java运行时系统所在的操作系统(如windows2000)支持时间片的轮换,则线程调度器就支持相同优先级线程的时间片轮换。 (3)代码示例

package com.px1987.j2se.thread.priority; public class ThreadPriorityTest { }

class MyThread2 extends Thread { }

public void run() { }

for (int i = 0; i < 10; i++) {

System.out.println(Thread.currentThread().getName() + \ yield(); }

public static void main(String[] args) { }

Thread t1 = new Thread(new MyThread2(), \Thread t2 = new Thread(new MyThread2(), \t1.setPriority(1); t2.setPriority(10); t1.start(); t2.start();

该程序的运行结果如下:

t1: 0 t2: 0 t2: 1 t2: 2 t2: 3 t2: 4 t2: 5 t2: 6 t2: 7 t2: 8 t2: 9 t1: 1

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Java线程及多线程技术及应用(2)在线全文阅读。

Java线程及多线程技术及应用(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/300537.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: