Java基本教程之线程让步
Java中的线程让步是指通过一些API让当前正在运行的线程立即暂停执行,转而给其他线程更多的执行时间。这个API是yield()方法,可以通过调用Thread类的静态方法yield()来实现线程的让步。
线程让步的作用
线程让步可以让多个线程更加公平的获取CPU的执行时间,有效提高并发量,避免某些线程一直独占CPU而导致其他线程无法运行的问题。当然,CPU时间片的分配还受到其他诸如线程优先级、任务调度等方面的影响。
线程让步的示例
以下是两个示例说明。
示例1:yield()方法基本使用
public class YieldDemo implements Runnable {
public void run() {
for(int i=0; i<5; i++) {
// 当 i 为奇数时,输出当前线程名称
if (i%2 == 1) {
System.out.println(Thread.currentThread().getName());
}
// 让当前线程让步
Thread.yield();
}
}
}
public class Main {
public static void main(String[] args) {
YieldDemo demo = new YieldDemo();
Thread t1 = new Thread(demo, "Thread 1");
Thread t2 = new Thread(demo, "Thread 2");
t1.start();
t2.start();
}
}
在上面的示例中,我们创建了两个线程同时执行 YieldDemo
中的 run
方法。当 i
为奇数时,线程输出当前线程名称;在循环中加上调用 Thread.yield()
方法,可以使得两个线程在输出时交叉运行,达到线程让步的效果。
示例2:yield()方法和Thread的sleep()方法的比较
public class YieldSleepDemo implements Runnable {
@Override
public void run() {
long start = System.currentTimeMillis();
long end = 0;
while (end - start < 1000) {
System.out.println(Thread.currentThread().getName() + " 运行中");
Thread.yield();
end = System.currentTimeMillis();
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
YieldSleepDemo demo = new YieldSleepDemo();
Thread t1 = new Thread(demo, "Thread 1");
Thread t2 = new Thread(demo, "Thread 2");
t1.start();
// 线程2休眠500毫秒再启动,比线程1晚启动
Thread.sleep(500);
t2.start();
}
}
在上面的示例中,我们创建了两个线程同时执行 YieldSleepDemo
中的 run
方法,然后让线程2休眠500毫秒再启动,比线程1晚启动。在这个例子中,我们使用了 Thread.sleep()
,并将执行时间限制在1000毫秒内,通过查看控制台输出,可以发现线程让步 yield() 比线程休眠 sleep() 的效果要好,也就是线程让步可以更好地实现多线程之间的并行执行。
总结
线程让步是一种优秀的多线程编程技术,能够有效地提高多个线程在CPU上运行的公平性,保证多个线程能够充分利用CPU的时间,提高系统的响应速度和并发量。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java基本教程之线程让步 java多线程教程 - Python技术站