java多线程
学习目标
线程的基本概念
线程的创建和启动
线程的调度和优先级
线程的状态控制
线程同步
多任务
多任务---在同一时刻似乎有多个程序(进程)在同时运行的能力
多任务管理的实现方法---
抢占式多任务---直接中断而不需要事先和被中断程序协商(UNIX/Linux,Windows NT/XP)
协作式多任务---只有在被中断程序同意交出控制权之后才能执行中断( OS 9和手机)
正是由于这种多任务操作系统的出现才有了多线程这个概念
线程概述
每个进程都有独立的代码和数据空间,进程切换到开销大。
线程:轻量的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(标识该线程代码运行到那个地方),线程切换的开销小
多进程:在多任务操作系统中能(同时)运行多个任务(程序)
多线程:在同一应用程序中有多个顺序流(多个顺序流被称为多线程)(同时)执行
注意:同时是指同一个时间段,是因为cpu把时间段分成很多个时间片,同一个时间片运行不同的进程或线程,再因为cpu运行的速度相当的快,所以我们感觉他们是在同一时间内完成多个事情
每一个进程分配一块内存空间,每一个进程的多个线程共用同一个内存
线程的创建和启动
创建线程有两种方式:
Thread类代表线程类,它的最主要的两个方法是:
run()----------包含线程运行时所要执行的代码,称为线程体,是线程启动的入口
start()--------用于启动线程
说明:用户定义的线程类只需要继承Thread类,覆盖Thread类的run()方法,最后使用start()就可以启动用户定义的线程了
Java线程模型
虚拟的CPU,。
CPU所执行的代码,传递给Thread类对象。
CPU所处理的数据,传递给Thread类对象。
代码
数据
虚拟CPU
Java线程模型
线程例子
public class ThreadDemo1 extends Thread {
/**
* ***@param args
*/
public static void main(String[] args) {
//子线程1
ThreadDemo1 t1 = new ThreadDemo1();
//设置线程
("线程1");
//启动线程
();
//子线程2
ThreadDemo1 t2 = new ThreadDemo1();
("线程2");
();
//主线程调用
for (int i = 0; i < 50; i++) {
(().getName() + "==--" + i);
}
}
public void run() {
for (int i = 0; i < 50; i++) {
//得到启动线程的名字
(().getName() + "==" + i);
}
}
}
启动线程
每个线程都是通过某个特定Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体。
使用start()方法,线程进入Runnable(可运行)状态,它将向线程调度器注册这个线程。
调用start()方法并不一定马上会执行这个线程,正如上面所说,它只是进入Runnable 而不是Running。
注意,不要直接在程序中调用线程的run()方法。 run()方法会被线程自动调用
Thread注意
ThreadDemo1 t1 = new ThreadDemo1();
();
();//
一个线程只能启动一次
java多线程42816 PPT课件 来自淘豆网m.daumloan.com转载请标明出处.