多线程基础(一)
线程是并发运行的,即多个线程运行时靠线程调度器统一管理。
线程调度程序会分配给线程CPU时间片段,得到时间片的线程被CPU执行,
当超时后CPU会停滞执行该线程,此时线程调度会再次分配时间片给某个线程继续操作.
所以多个线程之间,每个线程的运行都是走走停停的,这种运行方式称为并发运行.
由于CPU在所有线程间快速切换运行,感官上这些线程的代码都是"同时运行"的.
线程的创建有两种方式:
1.继承Thread,并重写run方法来定义要运行的任务。
2.实现Runnable接口,单独定义线程任务。
第一种创建线程的方式结构简单,利于使用匿名内部类创建
但也存在两个明显不足:
1:由于需要继承Thread,而Java本身是单继承,这就导致如果继承Thread就不能继承其他类,这在实际开发中会有诸多不便
2:继承Tread后需要重写run方法来定义线程要执行的任务,这就导致线程与任务存在了一个必然的耦合关系,不利于线程的重用
第二种方法创建线程的演示
class MyRun implements Runnable{
public void run(){
for(int i=0;i<1000;i++){
System.out.println("Go");
}
}
public static void main(String[] args) {
//单独创建任务
Runnable r = new MyRun();
//创建线程
Thread t = new Thread(r);
t1.start();
}
也可以使用匿名内部类
Runnable r = new Runnable(){
public void run() {
for(int i=0;i<1000;i++){
System.out.println("Go");
}
}
};
Thread t = new Thread(r);
t.start();
线程中提供的一些方法介绍
| 方法名 | 作用 |
|---|---|
| void join() | 可以使一个线程在另一个线程上等待(置于阻塞状态),直到另一个线程完成后再继续运行 |
| static Thread currentThread() | 获取到运行这个方法的线程 |
| static void sleep(long ms) | 将运行该方法的线程置于阻塞状态于指定的毫秒。当超时后,线程会重新回到RUNNABLE状态,等待获取CPU时间片再次并发运行 |
| long getId() | 获取线程的唯一标示 |
| String getName() | 获取线程名字 |
| int getPriority() | 获取线程优先级 |
| boolean isAlive() | 判断线程是否处于活动状态 |
| boolean isDeamon() | 判断线程是否为守护线程 |
| boolean isInterrupted() | 判断线程是否是被中断的 |

被折叠的 条评论
为什么被折叠?



