再学java基础(11) java 线程(sleep,join,yield) 经典实例。
来源:互联网 发布:java ee8安装 编辑:程序博客网 时间:2024/05/18 19:44
package com.thread;public class TestThreadShutDown {/** * * 友情 关闭,而不可以用 stop()这样粗暴的方法。 * * @param args */public static void main(String[] args) {Runner4 r = new Runner4();Thread t = new Thread(r);t.start();for(int i=0;i<100000;i++) {if(i%10000 == 0 & i>0){System.out.println("in thread main i=" + i);}}System.out.println("Thread main is over");r.shutDown();}}class Runner4 implements Runnable{private boolean flag = true;@Overridepublic void run() {int i = 0;while(flag == true){System.out.println(" " + i);}}public void shutDown(){flag = false;}}
package com.thread;/************************ * join()方法使当前线程停下来等待,直至另一个调用join方法的线程终止。 值得注意的是,线程的在被激活后不一定马上就运行. 而是进入到可运行线程的队列中。 但是join()可以通过interrupt()方法打断线程的暂停状态, 从而使线程立刻抛出InterruptedException。 * * @author wang.dm * */public class Test_Join_1 {/** * @param args */public static void main(String[] args) {Thread t = new Thread(new RunnableIm());t.start();try {// 当main 线程调用t.join 时,main 线程等待t 线程 ,等待时间是1000 t.join(1000); // 主线程 只等1 秒,就等待一秒钟,不管子线程什么时候结束。System.out.println("JOIN 结束");} catch (InterruptedException e) {e.printStackTrace();}}}class RunnableIm implements Runnable{@Overridepublic void run() {try {System.out.println("开始睡觉……");Thread.sleep(9000); // T 线程睡 10秒钟。而 main 线程 只等待一秒钟。System.out.println("停止睡觉……");} catch (InterruptedException e) {e.printStackTrace();}}}
学习来源:http://java.chinaitlab.com/base/828720.html
package com.thread;/* * 在main方法中 通过new ThreadTest(t).start();实例化ThreadTest 线程对象, 它在holdThreadLock()方法中,通过 synchronized (thread),获取线程对象t的锁,并Sleep(9000)后释放,这就意味着,即使main方法t.join(1000),等待一秒钟, 它必须等待ThreadTest 线程释放t锁后才能进入wait方法中,它实际等待时间是9000+1000 MS运行结果是:getObjectLockBegin sleepEnd sleepReleaseObjectLockjoinFinish*/public class JoinTest {public static void main(String[] args) {Thread t = new Thread(new RunnableImpl());new ThreadTest(t).start();t.start();try {t.join(1000);System.out.println("joinFinish");} catch (InterruptedException e) {e.printStackTrace();}}}class ThreadTest extends Thread {Thread thread;public ThreadTest(Thread thread) {this.thread = thread;}@Overridepublic void run() {holdThreadLock();}public void holdThreadLock() {synchronized (thread) { // 获取 线程 t 的锁。System.out.println("getObjectLock");try {Thread.sleep(9000);} catch (InterruptedException ex) {ex.printStackTrace();}System.out.println("ReleaseObjectLock");}}}class RunnableImpl implements Runnable {@Overridepublic void run() {try {System.out.println("Begin sleep");Thread.sleep(2000);System.out.println("End sleep");} catch (InterruptedException e) {e.printStackTrace();}}}
package com.thread;import java.util.Date;public class TestInterrupt {/** interrupt() interrupt()中断线程。需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用interrupt()时,如果该线程正在执行普通的代码.那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到wait()/sleep()/join()后,就会立刻抛出InterruptedException。 * @param args */public static void main(String[] args) {MyThread thread = new MyThread();thread.start();try {/************************** * sleep() 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 由于sleep()方法是Thread类的方法,因此它不能改变对象的机锁。所以当在一个Synchronized方法中调用sleep()时,线程虽然休眠了.但是对象的机锁没有被释放,其他线程仍然无法访问这个对象。sleep()方法不需要在同步的代码块中执行。但是sleep()可以通过interrupt()方法打断线程的暂停状态,从而使线程立刻抛出InterruptedException。 */Thread.sleep(10000); //在哪个线程里调用 sleep方法 就让那个线程睡眠。主线程睡眠了。} catch (InterruptedException e) {thread.interrupt();}}}class MyThread extends Thread {boolean flag = true;public void run() {while(flag){System.out.println("====" + new Date() + "=====");try {sleep(1000);} catch (InterruptedException e) {return;}}}}
package com.thread;public class TestYield {/** * @param args */public static void main(String[] args) {MyThread3 t1 = new MyThread3("t1");MyThread3 t2 = new MyThread3("t2");t1.start();t2.start();}}class MyThread3 extends Thread {MyThread3(String s){super();}public void run(){for(int i=0;i<=100;i++) {System.out.println(getName() + " : " + i);if(i%10 == 0){//Yield()方法是停止当前线程,让同等优先权的线程运行。//如果没有同等优先权的线程,那么Yield()方法将不会起作用。 yield();}}}}
- 再学java基础(11) java 线程(sleep,join,yield) 经典实例。
- 再学java基础(11) java 线程(sleep,join,yield) 经典实例。
- java 线程 --- join,sleep,yield 基础学习
- Java多线程-(5)线程的优先级、sleep()、yield()、join()
- Java多线程-线程状态、sleep()、yield()、join()
- 【java并发】基础(3)--sleep、join、yield
- [疯狂Java]多线程:线程控制(join、daemon、sleep、yield、优先级)
- Java多线程编程1----基础知识--暂停线程(sleep(),yield(),join()详解)
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) (r)
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)(转)
- Java并发——线程间协作(wait、notify、sleep、yield、join)
- Java多线程笔记三(线程通信wait/notify/notifyAll/sleep/yield/join)
- Java多线程:(三)一些方法:start(),sleep(),yield(),join()
- Java 并发:sleep,yield,join
- 自学java之线程方法(sleep、join、yield)
- JAVA -- 线程sleep()和yield()、join()方法区别
- Java 线程间的协作(wait/notify/sleep/yield/join)
- java 线程:sleep join yield | wait notify notifyAll
- 解决jdk1.6已经安装,编译android源码报错问题
- 什么是ftp的主动模式和被动模式
- 关于while(cin>>str)输入无法结束的问题(转+修改)
- Ajax的XMLHttpRequest对象
- JAVA中使用FTPClient实现文件上传下载
- 再学java基础(11) java 线程(sleep,join,yield) 经典实例。
- 简单的S40后台运行
- xcode and ios 各个版本和下载地址
- 如何varchar类型的字段存储中文汉字(SQL Server 2008/2008 R2/2012)
- iphone--字符串去除空格
- poj 1017 Packets
- 让桌面快捷方式锐减,打造清爽桌面!
- java设计模式--策略模式
- 开发者必读 Android用户应知道的10事件