进程:
进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
线程:
线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
例一:
需求说明:张三和妻子各拥有一张银行卡和存折,可以对同一个银行账户进行存取款的操作,请使用多线程及同步方法模拟张三和妻子同时取款的过程。要求使用同步方法和同步代码块两种方式实现
分析:
定义Account类表示银行帐户 定义两个线程分别实现张三和妻子取款的操作
package com.vp.day06.demo01; public class Bank implements Runnable { int money = 500; @Override public void run() { while (true) { if (money == 0) { break; } sale(); } } public synchronized void sale() { if (money > 0) { System.out.println(Thread.currentThread().getName() + "准备取款!"); System.out.println(Thread.currentThread().getName() + "取款完毕!"); money -= 100; try { Thread.sleep(500); } catch (Exception e) { } } else { for (int i = 0; i < 5; i++) { System.out.println("余额不足以支付" + Thread.currentThread().getName() + "的取款,余额为0"); } } } private int money = 500; // 存款500 private int num = 0; // 存款不足的次数 @Override public void run() { for (int i = 0; i < 5; i++) { // 取款5次 synchronized (this) { if (num >= 5) { break; } if (money > 0) { // 存款够的时候 System.out.println(Thread.currentThread().getName() + "准备取款"); System.out.println(Thread.currentThread().getName() + "完成取款"); } else if (money <= 0) { // 存款不足时 num++; System.out.println("余额不足以支付" + Thread.currentThread().getName() + "的取款,余额为0"); } money -= 100; try { Thread.sleep(500); // 模拟取款时间 } catch (InterruptedException e) { e.printStackTrace(); } } } } }