Java多线程-基本使用
来源:互联网 发布:cfd软件 编辑:程序博客网 时间:2024/05/18 22:42
注:参考《Thinking in Java》
多线程是比多进程更低层次的一种多任务概念。而 线程驱动任务(不要理解为线程就是任务,而应该理解成线程驱动任务)
如下:
关于Thread.yield() 方法,可以理解为线程让步。当前线程从执行状态(run()方法中)变为就绪状态,而把自己的CPU执行时间让给其他线程。大概可以理解为:我执行的差不多了(run方法的循环中的一次迭代的操作),这个时候建议线程调度器调度其它线程来执行。也是在建议具有相同优先级的其它线程运行。
即:我现在不那么急,如果有人比较急可以现在先执行,我待会再执行,但是如果没有,我自己接着继续执行。(这时候锁并不会被释放)
public class LiftOff implements Runnable{protected int countDown = 10;private static int taskCount = 0;private final int id = taskCount++;public LiftOff() {}public String status(){return "#" + id + "(" + (countDown > 0 ? countDown : "Liftoff!") + "). ";}public void run() {// TODO Auto-generated method stubwhile(countDown-- > 0){System.out.println(status());Thread.yield();}}}
可以直接调用LiftOff实例的run方法,但是这样就不是线程驱动,而是直接调用。注意如果这么干,不会新开启一个线程,而是会直接运行run()的代码。
方法之一是: 可以实现Runnale接口并编写其run()方法,run()方法里面描述要执行的任务。
public class MoreBasicThreads { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub for(int i=0; i<5; i++) new Thread(new LiftOff()).start(); System.out.println("Waiting for LiftOff"); }}以上用多个线程去驱动了多个任务,从输出结果来看:运行的线程(包括main方法的线程)都是杂乱无章,换进换出时混在一起的。
而且可以观察到start方法很快就返回了:Waiting for LiftOff第一个输出。
Waiting for LiftOff
#1(9).
#0(9).
#2(9).
#4(9).
#1(8).
#0(8).
#4(8).
#1(7).
#4(7).
#2(8).
#3(9).
#2(7).
#1(6).
#0(7).
#1(5).
#0(6).
#2(6).
#3(8).
#4(6).
#3(7).
#2(5).
#0(5).
#1(4).
#3(6).
#4(5).
#2(4).
#1(3).
#0(4).
#1(2).
#0(3).
#2(3).
#4(4).
#3(5).
#4(3).
#2(2).
#0(2).
#1(1).
#0(1).
#2(1).
#4(2).
#3(4).
#1(Liftoff!).
#0(Liftoff!).
#2(Liftoff!).
#4(1).
#3(3).
#3(2).
#4(Liftoff!).
#3(1).
#3(Liftoff!).
当然还有其它方式:
比如:
public class SimpleThread extends Thread{
public void run(){
//some code
}
}
直接继承Thread类,写run()方法。然后start启动SimpleThread即可。
- Java多线程-基本使用
- Java多线程基本使用一
- IOS多线程基本使用
- 多线程:GCD 基本使用
- 多线程【概述+基本使用】
- Java-多线程基本
- JAVA多线程--基本特性
- 【Java】多线程<1>-概念及Thread类基本使用
- Java多线程复习与巩固(一)--线程基本使用
- 多线程(一) 多线程介绍及基本使用
- Win32 多线程的基本使用
- 多线程的基本使用实例
- c++11 多线程 -- 基本使用
- 多线程 - 09.NSOperation基本使用
- 网络多线程-NSOperationQueue基本使用
- iOS多线程的基本使用
- 多线程:NSOperation 的基本使用
- 多线程:NSOperation 的基本使用
- 洛谷 P2801 教主的魔法
- 猜字母
- 修改docker中的镜像源
- 使用Vector模拟实现STL中的stack
- 那些年我们一起撸过的缓存写法
- Java多线程-基本使用
- android 给多列的RecycleView添加头布局
- PhpStorm中快捷键总结,附详细使用说明
- 位运算符
- Qt:Quick:QAbstractTableModel的使用示例
- Yarn
- MyBatis的Mapper接口以及Example的实例函数及详解
- 给程序员简历的一些建议
- feature extraction