`
cbh735
  • 浏览: 14134 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

java线程放弃CPU使用权的三种方式

阅读更多
/**

* 接着上一次的线程问题,再继续探讨,不可以将问题提起又转去研究其他的问题了,不好的习惯

* 要坚持研究一个问题,量变才能达成质变,一个老师教会我的,目前为止,都有坚持在做某些事情

* 至于有些事情,自己喜欢做的,也就谈不上坚持了,那是心之所向,情之所至,不会想到“坚持”二字

* 也会一如既往滴去做,这就是人,当然,我木有说,探讨继续不是我的心之所向和情之所至。哈哈,

* 不扯了,今天就探讨下,线程的一些让出CPU的所使用的方法吧!这里不说线程进入阻塞状态的方法,

* 因为,在sleep,yield,join三种方法中,yield不是进入阻塞,而是从运行进入就绪状态,其他

* 两个方法是进入阻塞状态。下面就具体介绍一下吧!

*/

———Thread_Sleep.java

package com.cbh.thread_test;

public class Thread_Sleep extends Thread

{

public void run()

{

try

{

sleep(10000);//线程睡眠,让其他线程有执行的机会

System.out.println(“我睡了”);//如果线程可以被打断,这句将不输出。

}

catch (InterruptedException e)

{

//Thread_Sleep线程被打断时,会输出这句。

System.out.println(“睡不好,肯定有人来打断我的睡眠”);   }

System.out.println(“线程结束了运行”);  }

public static void main(String[] args)

{

Thread_Sleep ts=new Thread_Sleep();

ts.start();

try

{

Thread.sleep(1100); //睡眠时间少于Thread_Sleep的睡眠时间,可以打断Thread_Sleep线程,反之,则不可。

}

catch (InterruptedException e)

{

e.printStackTrace();

}

ts.interrupt();//打断Thread_Sleep线程

}

}

下面介绍下现场的让步和等待其他线程结束——–Thread_Yield_jion.java

package com.cbh.thread_test;

public class Thread_Yield_jion extends Thread

{

public void run()

{

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

{

System.out.println(currentThread().getName()+”:”+i);

yield();

/*线程让步,所谓的让步就是礼让,退让的意思,可以理解为以示友好

*但是这里的让步是同一个优先级的让步,也就是人和人之间可以让步,动物和人之间就谈不上让步了

*和sleep一样,yield也是一个静态方法,它是让正在运行的线程,让步给其他线程,自己处于就绪状态中

*如果没人和你争,那就不用让步了,也就是没有同优先级的线程在等待CPU的话,就不用让步了,也就

谈不上yield了。

*/

}

}

public static void main(String[] args)

{

Thread_Yield_jion ty=new Thread_Yield_jion();

Thread_Yield_jion ty1=new Thread_Yield_jion();

ty.start();

System.out.println(“线程开始运行啦!”);

try

{

ty.join(); //从字面上来看,join是加入的意思,可以理解为加入其他线程。

但是,实际上,它的功能是主线程调用了Thread_Yield_jion线程的join方法,

自己等待,等到Thread_Yield_jion执行完毕之后,主线程才能继续向下执行

}

catch (InterruptedException e)

{

e.printStackTrace();

}

System.out.println(“运行结束了!”);

ty1.start();//如果不join的话,那就会并发执行,而是用join就会等待ty线程执行完毕才会执行ty1线程

} }

/*接下来谈下yield和sleep的区别:

* 虽然两者都是静态方法,也同样是让自己放弃CPU,让给其他线程机会,但是它们之间还是有区别滴!

* 1,sleep让给别人机会以后,自己处于阻塞状态,而yield处于就绪状态

* 2,sleep方法使用时要抛出异常,而yield什么都不做。

* 3,sleep会不考虑优先级的给其他线程机会,而yield是考虑同等优先级地给予其他线程机会!

* (可以类比为:一般情况下,同班同学才能让给他“扫把”使用,如果是外校的人,那么只有等我睡着了,

* 才会有让让他得到“扫把”的可能,原因是:优先级不一样)

* 4,sleep的可移植性比yield好,不能靠yield来提高程序的并发性能,它的唯一用途是在测试期间

* 人为地提高程序的并发性能,以帮助发现一些隐藏的错误。  */

分享到:
评论

相关推荐

    Java多线程知识点总结

    阻塞状态是指线程因为某些原因放弃CPU的使用权,暂时停止运行,直到重新进入就绪状态。死亡状态则是线程的生命周期结束,可能是因为线程任务执行完毕或因异常情况退出。 在Java中,创建线程有几种常见的方式。第一...

    java多线程Demo

    - yield()方法让当前线程暂停,将CPU使用权让给其他同优先级的线程。 - interrupt()方法用于中断线程,如果线程正在阻塞(如sleep或wait),会被中断并抛出InterruptedException。 通过这些技术,我们可以构建...

    Java线程 学习

    - **阻塞状态**:线程因某种原因放弃CPU使用权而暂时停止运行。 - **死亡状态**:线程执行完毕或者因异常退出run()方法。 #### 五、Java线程的创建与管理 - **继承Thread类**:这是最常用的创建线程的方式之一。...

    java常用的代码——线程

    - **阻塞状态(Blocked/Waiting/Timed Waiting)**:线程因为某种原因放弃了CPU使用权,停止执行,等待其他线程的通知或等待特定时间到达后继续执行。 - **死亡状态(Terminated)**:线程执行结束或因异常而终止的...

    java经典多线程面试题

    - 阻塞状态(Blocked):线程因为某些原因放弃CPU使用权,暂时停止运行。 - 等待状态(Waiting):线程等待其他线程执行某个操作。 - 超时等待状态(Timed Waiting):线程在指定的时间内等待。 - 终止状态...

    java线程有关例题

    Java线程调度器会根据优先级、系统资源等条件决定哪个线程获得CPU执行权。 11.4章节“线程状态的改变”解释了如何通过`sleep()`, `join()`, `wait()`, `notify()`, `notifyAll()`等方法来控制线程状态的转换。例如...

    java 线程编程教程

    3. **线程控制**:可以使用join()方法使当前线程等待其他线程结束,sleep()方法使当前线程暂停一段时间,yield()方法让当前线程放弃CPU使用权。 三、线程同步 1. **同步机制**:为了解决多线程环境下共享数据的...

    java线程入门 Java线程编程很好的入门书

    Java线程是多任务编程的重要组成部分,特别是在Java这种支持并发执行的语言中,理解和掌握线程的概念及使用至关重要。本文将基于提供的"Java线程入门"资料,深入探讨Java线程编程的基本概念、创建方法以及常见操作,...

    java多线程示例

    - 使用ExecutorService和Future:Java 5引入的Executor框架提供了一种更灵活的多线程管理方式。 二、线程控制 1. 同步机制:为了避免多线程间的竞态条件,Java提供了synchronized关键字。它可以用于方法或代码块,...

    JAVA多线程(精典总结)

    创建Java线程有两种主要方式: 1. 继承`java.lang.Thread`类,重写`run()`方法,并通过`start()`方法启动线程。 2. 实现`Runnable`接口,提供`run()`方法,然后将`Runnable`实例传递给`Thread`类的构造函数来创建...

    java线程 线程(电子书)

    - **阻塞**:线程因某种原因放弃CPU使用权,停止执行。 - **死亡**:线程执行完毕或者被强制停止。 ### 四、线程同步与死锁 #### 线程同步 - **定义**:线程同步是为了保证多个线程能够正确访问共享资源而采取的...

    java线程api学习文档

    - `yield()`: 让当前线程放弃CPU使用权,但不进入阻塞状态,而是回到就绪队列,让其他线程有机会执行。 - `interrupt()`: 中断线程,标记线程的中断状态。在某些阻塞操作(如`sleep()`, `wait()`, `join()`)中,...

    JAVA多线程总结

    - **让步**:`Thread.yield()`让当前线程放弃CPU使用权。 - **合并**:多个线程可以合并为一个线程组,便于管理和调度。 - **守护线程**:不会阻止JVM退出,常用于后台服务。 **七、Java线程的新特性** 1. **...

    Java线程.pdf

    3. **阻塞** (`BLOCKED`):线程由于某种原因放弃CPU使用权而暂时停止运行。 4. **等待** (`WAITING`):线程处于等待状态,等待其他线程唤醒。 5. **超时等待** (`TIMED_WAITING`):线程处于等待状态,但设置了超时...

    Java线程总结.pdf

    阻塞状态是指线程因为某些原因放弃CPU的使用权,暂时停止其运行,直到线程重新进入可运行状态;等待状态是指线程在等待其他线程完成某个操作,不能执行;计时等待状态类似于等待状态,不过它设定了一定的等待时间;...

    最好的java多线程电子书

    - **阻塞状态**:线程由于某种原因放弃CPU使用权,暂时停止运行。 - **死亡状态**:线程完成执行或被强制终止后所处的状态。 - **阻塞的原因**包括但不限于: - 调用`suspend()`方法。 - 调用`sleep()`方法。 -...

    java_Thread.rar_java 多线程_java多线程

    - yield():让当前线程放弃CPU执行权,但不保证立即执行其他线程。 - interrupt():中断线程,线程内部需要处理中断标志来响应中断。 - synchronized:用于控制并发访问共享资源,防止数据不一致。 此外,Java还...

    java多线程作业.docx

    - 阻塞(Blocked/Waiting/Timed Waiting):阻塞状态是指线程因为某种原因放弃了CPU的使用权,停止执行,等待重新占有CPU。 - 死亡(Terminated):线程执行完毕或者因异常退出了run()方法,则该线程结束生命周期...

    Java线程,很全面地讲了java线程方面的东西,非常实用

    4. **阻塞状态**(Blocked/Waiting/Timed Waiting):线程失去CPU使用权,等待其他线程的操作。 5. **死亡状态**(Dead/terminated):线程执行完毕或因异常结束。 **阻塞状态**可以细分为: - **等待状态**...

    Java_多线程与并发编程总结.doc

    Java提供了两种创建线程的方式:一是继承自`java.lang.Thread`类,二是实现`java.lang.Runnable`接口。线程具有优先级,高优先级的线程会先得到执行机会。此外,线程还可以被标记为守护线程,当只剩下守护线程时,...

Global site tag (gtag.js) - Google Analytics