/**
* 接着上一次的线程问题,再继续探讨,不可以将问题提起又转去研究其他的问题了,不好的习惯
* 要坚持研究一个问题,量变才能达成质变,一个老师教会我的,目前为止,都有坚持在做某些事情
* 至于有些事情,自己喜欢做的,也就谈不上坚持了,那是心之所向,情之所至,不会想到“坚持”二字
* 也会一如既往滴去做,这就是人,当然,我木有说,探讨继续不是我的心之所向和情之所至。哈哈,
* 不扯了,今天就探讨下,线程的一些让出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来提高程序的并发性能,它的唯一用途是在测试期间
* 人为地提高程序的并发性能,以帮助发现一些隐藏的错误。 */
分享到:
相关推荐
阻塞状态是指线程因为某些原因放弃CPU的使用权,暂时停止运行,直到重新进入就绪状态。死亡状态则是线程的生命周期结束,可能是因为线程任务执行完毕或因异常情况退出。 在Java中,创建线程有几种常见的方式。第一...
- yield()方法让当前线程暂停,将CPU使用权让给其他同优先级的线程。 - interrupt()方法用于中断线程,如果线程正在阻塞(如sleep或wait),会被中断并抛出InterruptedException。 通过这些技术,我们可以构建...
- **阻塞状态**:线程因某种原因放弃CPU使用权而暂时停止运行。 - **死亡状态**:线程执行完毕或者因异常退出run()方法。 #### 五、Java线程的创建与管理 - **继承Thread类**:这是最常用的创建线程的方式之一。...
- **阻塞状态(Blocked/Waiting/Timed Waiting)**:线程因为某种原因放弃了CPU使用权,停止执行,等待其他线程的通知或等待特定时间到达后继续执行。 - **死亡状态(Terminated)**:线程执行结束或因异常而终止的...
- 阻塞状态(Blocked):线程因为某些原因放弃CPU使用权,暂时停止运行。 - 等待状态(Waiting):线程等待其他线程执行某个操作。 - 超时等待状态(Timed Waiting):线程在指定的时间内等待。 - 终止状态...
Java线程调度器会根据优先级、系统资源等条件决定哪个线程获得CPU执行权。 11.4章节“线程状态的改变”解释了如何通过`sleep()`, `join()`, `wait()`, `notify()`, `notifyAll()`等方法来控制线程状态的转换。例如...
3. **线程控制**:可以使用join()方法使当前线程等待其他线程结束,sleep()方法使当前线程暂停一段时间,yield()方法让当前线程放弃CPU使用权。 三、线程同步 1. **同步机制**:为了解决多线程环境下共享数据的...
Java线程是多任务编程的重要组成部分,特别是在Java这种支持并发执行的语言中,理解和掌握线程的概念及使用至关重要。本文将基于提供的"Java线程入门"资料,深入探讨Java线程编程的基本概念、创建方法以及常见操作,...
- 使用ExecutorService和Future:Java 5引入的Executor框架提供了一种更灵活的多线程管理方式。 二、线程控制 1. 同步机制:为了避免多线程间的竞态条件,Java提供了synchronized关键字。它可以用于方法或代码块,...
创建Java线程有两种主要方式: 1. 继承`java.lang.Thread`类,重写`run()`方法,并通过`start()`方法启动线程。 2. 实现`Runnable`接口,提供`run()`方法,然后将`Runnable`实例传递给`Thread`类的构造函数来创建...
- **阻塞**:线程因某种原因放弃CPU使用权,停止执行。 - **死亡**:线程执行完毕或者被强制停止。 ### 四、线程同步与死锁 #### 线程同步 - **定义**:线程同步是为了保证多个线程能够正确访问共享资源而采取的...
- `yield()`: 让当前线程放弃CPU使用权,但不进入阻塞状态,而是回到就绪队列,让其他线程有机会执行。 - `interrupt()`: 中断线程,标记线程的中断状态。在某些阻塞操作(如`sleep()`, `wait()`, `join()`)中,...
- **让步**:`Thread.yield()`让当前线程放弃CPU使用权。 - **合并**:多个线程可以合并为一个线程组,便于管理和调度。 - **守护线程**:不会阻止JVM退出,常用于后台服务。 **七、Java线程的新特性** 1. **...
3. **阻塞** (`BLOCKED`):线程由于某种原因放弃CPU使用权而暂时停止运行。 4. **等待** (`WAITING`):线程处于等待状态,等待其他线程唤醒。 5. **超时等待** (`TIMED_WAITING`):线程处于等待状态,但设置了超时...
阻塞状态是指线程因为某些原因放弃CPU的使用权,暂时停止其运行,直到线程重新进入可运行状态;等待状态是指线程在等待其他线程完成某个操作,不能执行;计时等待状态类似于等待状态,不过它设定了一定的等待时间;...
- **阻塞状态**:线程由于某种原因放弃CPU使用权,暂时停止运行。 - **死亡状态**:线程完成执行或被强制终止后所处的状态。 - **阻塞的原因**包括但不限于: - 调用`suspend()`方法。 - 调用`sleep()`方法。 -...
- yield():让当前线程放弃CPU执行权,但不保证立即执行其他线程。 - interrupt():中断线程,线程内部需要处理中断标志来响应中断。 - synchronized:用于控制并发访问共享资源,防止数据不一致。 此外,Java还...
- 阻塞(Blocked/Waiting/Timed Waiting):阻塞状态是指线程因为某种原因放弃了CPU的使用权,停止执行,等待重新占有CPU。 - 死亡(Terminated):线程执行完毕或者因异常退出了run()方法,则该线程结束生命周期...
4. **阻塞状态**(Blocked/Waiting/Timed Waiting):线程失去CPU使用权,等待其他线程的操作。 5. **死亡状态**(Dead/terminated):线程执行完毕或因异常结束。 **阻塞状态**可以细分为: - **等待状态**...
Java提供了两种创建线程的方式:一是继承自`java.lang.Thread`类,二是实现`java.lang.Runnable`接口。线程具有优先级,高优先级的线程会先得到执行机会。此外,线程还可以被标记为守护线程,当只剩下守护线程时,...