进程
1.什么是进程?
进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的
独立单位。进程是可与其他程序并发执行的程序,在一个数据集合上的运行过程。它是系统进行
资源分配和调度的一个独立单位。
2.进程的几个概念
1 结构特性
为了控制和管理进程,系统为每个进程设立一个**进程控制块\- PCB。
2 动态性
进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的,进程在其生命周期内,在三种基本状态(产生、执行、消亡)之间转换。
3 异步性
由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。
4.并发性
任何进程都可以同其他进程一起向前推进。
5.独立性
进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
3 线程
1. 线程是程序执行的最小单位\,而进程是操作系统分配资源的最小单位;
2. 一个进程由一个或多个线程组成,线程是一个进程中代码的**不同执行路线\;
3. 进程之间相互独立,但同一进程下的**各个线程之间共享程序的内存空间(包括代码段,数据集,堆
等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;
4. 调度和切换:线程上下文切换比进程上下文切换要快
4.线程和进程的区别
5.线程的切换方式
6.线程生命周期
7.线程创建
7.1 继承Thread类
public class ThreadDemo01 extends Thread {
@Override
public void run() {
for(int i =0;i<10;i++) {
System.out\.print(this.getName()+":"+i);
}
}
}
public static void main(String[] args) {
new ThreadDemo01().start();
}
运行结果
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-0:5
Thread-0:6
Thread-0:7
Thread-0:8
Thread-0:9
2.实现Runnable接口
public class ThreadDemo01 implements Runnable {
@Override
public void run() {
for(int i =0;i<10;i++) {
System.*out\*.println(Thread.*currentThread*().getName()+":"+i);
}
}
public static void main(String[] args) {
new Thread(new ThreadDemo01()).start();
}
}
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-0:5
Thread-0:6
Thread-0:7
Thread-0:8
Thread-0:9
3.实现Callable接口
public class ThreadDemo01 implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 1; i < 1000; i++) {
sum += i;
}
return sum;
}
public static void main(String[] args) throws Exception {
FutureTask<Integer> ft =
new FutureTask<Integer>(new ThreadDemo01());
ft.run();
System.*out\*.println("s:" + ft.get());
}
}
s:499500
8.线程就绪
Thread t = new Thread( );
t.start( ); //启动线程(线程就绪)
1.线程运行
一旦CPU分配了运行时间,就调用线程的run( )方法。
2.线程阻塞
(1) sleep(n)
(2) join()
(3) yield()
(4) wait
3.线程死亡
9.守护线程和用户线程
守护最后一个用户线程才结束。
1.用户线程
创建的线程
2.守护线程
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
while (true) {
try {
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd hh:mm:ss");
System.out.println(sdf.format(d));
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
Thread t2 = new Thread(()->{
for(int i=0;i<100;i++){
try {
System.out.println("我是许则"+i);
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
t1.setDaemon(true);
t1.start();
t2.start();