进程与线程

概念

  • 进程是程序的执行过程(动态性),持有资源(共享内存、共享文件)和线程(是资源和线程的载体)
  • 线程是系统中最小的执行单元

线程间交互

  1. 互斥 资源有限,需抢占
  2. 同步 协作完成一项任务,有先后顺序

java线程初探

java对线程的支持

Thread类和Runnable接口,以及共同的run()方法。

java 多线程 资源锁 java多线程释放资源_System

Thread类

join()使当前运行线程等待调用线程的终止,再继续运行

yield()使当前运行线程释放处理器资源

停止线程的错误方法 1.stop() 2.interrupt()

使用退出标志(volatile bool keepRunning)停止线程循环

java 多线程 资源锁 java多线程释放资源_守护线程_02

Thread和Runnable示例

Thread和Runnable各自每运行10次暂停1s,交替运行。一个.java文件可有多个类(不包括内部类),但只能有一个public类。

public class Actor extends Thread {
	public void run(){
		System.out.println(getName()+"是一个演员!");
		int count = 0;
		boolean keepRunning = true;
	
		while(keepRunning){
			System.out.println(getName()+"登台演出:"+ (++count));
			if(count == 100){
				keepRunning = false;
			}	
			if(count%10== 0){
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
		System.out.println(getName()+"的演出结束了!");
	}
	public static void main(String[] args){
		Thread actor = new Actor();
		actor.setName("Mr. Thread");
		actor.start();
		Thread actressThread = new Thread(new Actress(),"Ms. Runnable");
		actressThread.start();
	}
}
class Actress implements Runnable{
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName()+"是一个演员!");
		int count = 0;
		boolean keepRunning = true;
		while(keepRunning){
System.out.println(Thread.currentThread().getName()+"登台演出:"+ (++count));	
			if(count == 100){
				keepRunning = false;
			}
			if(count%10== 0){
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
System.out.println(Thread.currentThread().getName()+"的演出结束了!");
	}
}

总结一下:

java 多线程 资源锁 java多线程释放资源_守护线程_03


java 多线程 资源锁 java多线程释放资源_java_04

线程的生命周期

java 多线程 资源锁 java多线程释放资源_守护线程_05


阻塞事件:如sleep(),wait(),join()方法被调用

java守护线程

java线程分两类:

1.用户线程

2.守护线程 一旦所有用户线程都结束了,守护线程也就结束了

java 多线程 资源锁 java多线程释放资源_java_06


java 多线程 资源锁 java多线程释放资源_System_07


java 多线程 资源锁 java多线程释放资源_java 多线程 资源锁_08


java 多线程 资源锁 java多线程释放资源_java_09

jstack生成线程快照

java 多线程 资源锁 java多线程释放资源_java 多线程 资源锁_10


java 多线程 资源锁 java多线程释放资源_System_11