14.1 线程回顾和同步函数

package cn.chen.synchronizefunction;
/*
多线程:一个进程中有多个线程可以同时执行任务。

多线程的好处:
	1.解决一个进程中可以同时执行多个任务的问题
	2.提高资源利用率
	
多线程的弊端:
	1.增加了CPU的负担
	2.降低了进程中线程的执行概率
	3.出现线程安全问题
	4.引发死锁现象

自定义线程的实现方式:
	方式一:
		1.自定义一个类继承Thread类。
		2.重写Thread类的run方法,把自定义线程的代码写再run方法上。
		3.创建Thread的子类对象,并调用start方法启动线程。
	注意:
		1.不可直接调用run方法,否则就相当于直接调用基本方法。


线程安全问题解决方法:
	方式一:同步代码块:
		      同步代码块的格式:
			synchronize(锁对象){
				需要被同步的代码。
			}
	方式二:同步函数:同步函数就是使用synchronized修饰一个函数.
	
		   同步函数注意事项:
		   	1.如果一个非静态的同步函数的(锁 --对象)是this对象,如果是静态的同步函数(锁---对象)是当前函数所属的类字节码文件(类.class)
			2.同步函数的锁对象是固定的,不能由你来指定的
		   推荐使用同步代码块:
		   	1.同步代码块的锁对象可以由我们自己随意指定,同步函数是固定的,不能由我们来指定。
		   	2.同步代码块可以很方便控制需要被同步代码的范围,同步函数必须是整个函数的所有代码全部被同步了。


案例:一个银行账户5000,两夫妻一人一个卡,取钱一次只能取出1000,要求线程安全。
 * */
class BankTHread extends Thread{
	static int count = 5000;
	public BankTHread(String name){
		super(name);
	}
	@Override
	public  void run() {
		// TODO Auto-generated method stub
		super.run();
		getMoney();
	}
	//静态函数
	public static synchronized void  getMoney(){
		while(true){
			if(count > 0){
				System.out.println(Thread.currentThread().getName()+"取走了1000,还剩余 "+(count-1000));
				count = count - 1000;
			}else{
					System.out.println("余额0元");
					break;
				}
		}
	}
	
}
public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BankTHread b1 = new BankTHread("老公");
		BankTHread b2 = new BankTHread("老婆");
		b1.start();
		b2.start();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值