知识总结
进程
- 概念:程序是静止的,只有真正运行时的程序,才被称为进程
- 单核CPU在任何时间点上,只能运行一个进程;宏观并行,微观串行
线程
- 概念:又称轻量级的进程(Light Weight Process)程序中的顺序控制流程,同时也是CPU的基本调度单位。
- 进程可由多个线程组成,彼此间完成不同的工作,交替执行,称为多线程。
- Java虚拟机是一个进程,当默认包含主线程(main)可通过代码创建多个独立线程,与Main并发执行。
线程的组成
- CPU时间片:操作系统会为每个线程分配执行时间
- 运行数据:
堆空间,存储线程需使用的对象,多个线程可以共享堆中的对象;栈空间,存储线程需使用的局部变量,每个线程都拥有独立栈 - 线程的逻辑代码
创建线程
- 继承类extends Thread、覆盖run()方法、创建子类对象、调用Start()方法
- 实现Runnable接口、覆盖run()方法、创建实现类对象、创建线程对象、调用Start()方法
常用方法
- 休眠:public static void sleep(long millis):当前线程主动休眠millis毫秒
- 放弃:public static void yield();当前线程主动放弃时间片,回到就绪庄涛,竞争下一次时间片
- 结合:public final void join();允许其他线程加入到当前线程中
- 同步代码块:synchronized(临界资源对象){//对临界资源对象加锁
//代码(原子操作)
}
每日练习
答:单核CPU在任何时间点上,只能运行一个进程;宏观并行,微观串行,进程可由多个线程组成,彼此间完成不同的工作,交替执行
答:C
答:C
答:A
答:
public class TestT5 {
public static void main(String[] args) {
Number n1 = new Number();
BigChar c1 = new BigChar();
Thread t1 = new Thread(c1);
n1.start();
t1.start();
}
}
class Number extends Thread{
int j = 0;
public void run(){
while(true){
for(int i = 1 ; i <= 26 ; i++){
j++;
System.out.println(i + "-" + j);
if(j == 100)
return;
}
}
}
}
class BigChar implements Runnable{
int j = 0;
public void run(){
while(true){
for(int i = 65 ; i <= 90; i++){
j++;
System.out.println((char)i + "-" + j);
if(j == 100)
return;
}
}
}
}
答:加上synchronized之后,同一时间只有一个运行,否则交替执行
答:C