线程的表述:
* 进程:计算机中的每一个正在执行的程序就是一个进程,一个进程有一个 或者多个线程;
* 每个应用中的线程 可以同时执行多个不同操作;
*
* 例如:
* 开发工具:myEclipse:
*
* Java中线程的实现方式:
* 两种:
* 第一种:继承therad类 重写 run() 方法,创建子类对象实现线程调用
* eg:new Thread 或者子类对象,开始线程:对象.start();
*
* 第二种:实现 Runnable接口();
* 开启线程 调用 start();
*
* 线程的 特性:
* 原子性:
* 可见性:
* 有序性:
* 结果无序:
第一种:继承therad类 重写 run() 方法,
public class Thread_demo {
public static void main(String[] args) {
//创建对象
Booking bk1 = new Booking("一号窗口");
Booking bk2 = new Booking("老年人窗口");
Booking bk3 = new Booking("军人窗口");
Booking bk4 = new Booking("VIP窗口");
//开始启用线程
bk1.start();
bk2.start();
bk3.start();
bk4.start();
}
}
/**
* 售票操作
* @author direct
*/
class Booking extends Thread{
//构造 函数
public Booking(String name){
super(name);
}
//定义变量
static int pices=100;
// 定义一个同步对象
Object ob="aa";
//重写 run方法,买票
@Override
public void run() {
while(pices>0){
//执行 代码加锁
synchronized (ob) {
if(pices>0){
System.out.println(super.getName()+"---> 买出了第"+pices+"张票");
pices--;
}else{
System.out.println("票已售罄!!!");
}
//线程休息 10毫秒
try {
this.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//super.run();
}
第二种:实现 Runnable接口();
* 使用线程模拟 银行存取钱:
* 银行 存取
* ATM取钱
* 使用实现接口的方式
*
* 实现思路:
* 银行类:实现方法 saveMoney(); z注意 必须 进行 线程 或者同步控制
* ATM类:实现方法getMoney();
*
* 创建对象 启动线程操作同一个 变量(存款);
public class Thread_01 {
public static void main(String[] args) {
//创建对象 ATM对象
Atm am = new Atm();
//创建线程 对象,将 Atm 放入线程中
Thread t0 = new Thread(am);
Thread t1 = new Thread(am);
Thread t2 = new Thread(am);
Thread t3 = new Thread(am);
//启动线程
t0.start();
t1.start();
t2.start();
t3.start();
AtmTwo amTwo = new AtmTwo();
//创建线程 对象,将 Atm 放入线程中
Thread t4 = new Thread(amTwo);
Thread t5 = new Thread(amTwo);
Thread t6 = new Thread(amTwo);
Thread t7 = new Thread(amTwo);
//启动线程
t4.start();
t5.start();
t6.start();
t7.start();/**/
}
}
class Bank{
//定义金额
private static int sumMoney=2000;
//创建对象
Object ob = "aa";
//存款
public void saveMoney(int n){
synchronized (ob) {
sumMoney =sumMoney+n;
System.out.println(Thread.currentThread().getName()+"存入===>"+(n));
//线程 睡眠
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//查询 总金额
public void showMoney(){
System.out.println("账户总金额:"+sumMoney);
}
//取款
public void getMoney(int n){
synchronized (ob) {
if(sumMoney<=0){
System.out.println("余额不足");
}else{
System.out.println(Thread.currentThread().getName()+"取出===>"+(n));
sumMoney =sumMoney-n;
}
//线程 睡眠
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Atm implements Runnable {
//得到银行对象 调用 方法
Bank bk = new Bank();
//取钱
@Override
public void run() {
int money = 100;
for (int i = 0; i < 3; i++) {
bk.saveMoney(money);
bk.showMoney();
}
}
}
/**/
class AtmTwo implements Runnable {
//得到银行对象 调用 方法
Bank bk = new Bank();
//取钱
@Override
public void run() {
int money = 100;
for (int i = 0; i < 3; i++) {
bk.getMoney(money);
bk.showMoney();
}
}
}
*