博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程的其他特征
阅读量:4180 次
发布时间:2019-05-26

本文共 3777 字,大约阅读时间需要 12 分钟。

睡眠:

//使用sleep控制线程运行public class Test9 {
/** * @param args */ public static void main(String[] args) { new Thread(new MyTask()).start(); new Thread(new MyTask2()).start(); }}class MyTask implements Runnable{
@Override public void run() { // for (int i = 0; i < 10000; i++) { System.out.println("线程名:"+Thread.currentThread().getName()+":"+i); } }}class MyTask2 implements Runnable{
@Override public void run() { for (int i = 0; i < 10000; i++) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程名:"+Thread.currentThread().getName()+":"+i); } }}

优先级:

//使用优先级控制线程运行public class Test10 {
/** * @param args */ public static void main(String[] args) { Thread t1=new Thread(new MyTask3()); t1.setPriority(10); t1.start(); Thread t2=new Thread(new MyTask4()); t2.setPriority(10); t2.start(); }}class MyTask3 implements Runnable{
@Override public void run() { // for (int i = 0; i < 10000; i++) { System.out.println("线程名:"+Thread.currentThread().getName()+":"+i); } }}class MyTask4 implements Runnable{
@Override public void run() { for (int i = 0; i < 10000; i++) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程名:"+Thread.currentThread().getName()+":"+i); } } }

join

在一个线程中调用另一个线程的join方法  则当前线程阻塞  让另一个线程先运行//使用join控制线程运行public class Test11 {
/** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { // main线程 LifeCircle lc=new LifeCircle(); System.out.println(lc.isAlive());//线程状态值 lc.start(); System.out.println(lc.isAlive()); lc.join();//则表示当前线程阻塞 让lc运行完 再运行 System.out.println("主程序"); System.out.println(lc.isAlive()); }}class LifeCircle extends Thread{
@Override public void run() { int i=0; while((++i)<10){ System.out.println(Thread.currentThread().getName()+":"+i); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } }}

yiled

yield 与sleep的区别1.sleep给其他线程运行的机会  但不考虑其他线程的优先级 但是yield只会让给相同或更高优先级的线程2.sleep有异常  yield 没有3.当线程执行了sleep方法后  将转到阻塞状态  而执行了yield方法之后 则转到就绪状态 所以yield后可能执行一次或几次。public class Test12 {
/** * yield余sleep的区别 * 1.sleep给其他线程运行的机会 但不考虑其他线程的优先级 但是yield只会让给相同或更高优先级的线程 * 2.sleep有异常 yield 没有 * 3.当线程执行了sleep方法后 将转到阻塞状态 而执行了yield方法之后 则转到就绪状态 所以yield后可能执行一次或几次 */ public static void main(String[] args) { //挂起线程 YieldOne y1=new YieldOne(); YieldOne y2=new YieldOne(); Thread t1=new Thread(y1,"a");//10 Thread t2=new Thread(y2,"b");//1 t1.setPriority(1); t1.start(); t2.setPriority(10);//第二个线程的优先级高 t2.start(); }}class YieldOne implements Runnable{
@Override public void run() { if("a".equals(Thread.currentThread().getName())){ Thread.yield();//yield只会将执行权交给优先级高的线程// try {
// Thread.sleep(100);// } catch (InterruptedException e) {//sleep不管优先级 只要调用sleep 则当前线程睡 其他接过执行权// // TODO Auto-generated catch block// e.printStackTrace();// } } for (int i = 0; i <100; i++) { System.out.println(Thread.currentThread().getName()+":"+i);; } }}

转载地址:http://ybhai.baihongyu.com/

你可能感兴趣的文章
《miniOS分析》前言
查看>>
《Linux内核编程》第十四章:Linux驱动基础
查看>>
Linux平台下ARM-Linux交叉编译工具链
查看>>
Window平台下ADS自带ARMCC编译工具链
查看>>
micro2440/tiny6410使用JLINK直接烧录nand flash
查看>>
C编译器、连接器与可执行机器码文件
查看>>
android linker 浅析
查看>>
802.11 traffic id
查看>>
Android系统wifi分析-手动连接过程
查看>>
设置IP别名Shell脚本
查看>>
Source Insight 宏-单行注释
查看>>
levelDB源码分析-Arena
查看>>
levelDB源码分析-SSTable
查看>>
平滑升级Nginx的Shell脚本
查看>>
SSH远程会话管理工具
查看>>
canvas标签设长宽是在css中还是在标签中
查看>>
如何创建一个vue项目
查看>>
webpack和webpack-simple中如何引入css文件
查看>>
vue1.0和vue2.0的区别之路由
查看>>
关于vue-router2.0的学习笔记
查看>>