线程的 加锁

3 篇文章 0 订阅
1 篇文章 0 订阅
  • synchronized
  • 锁定的是对象,如果加在方法上则锁定的是this
  • 要同步的多个线程必须锁定同一个对象
  • 修饰方法和修饰代码块
    没加锁的线程:

main函数:加没加锁主函数不变

public class SynChrromizeTest {
public static void main(String[] args) throws InterruptedException {
	Move move = new Move(60);
	Thread th1=new Thread(move,"搬砖1");
	Thread th2=new Thread(move,"搬砖2");
	th1.start();
	th2.start();
	Thread.sleep(1500);
	System.out.println("还剩几块砖"+move.getCount());
}}

搬砖的类:加锁:就是在减方法内,添加synchronize

	public class Move implements Runnable{
//	搬砖,为了使搬砖不会,有多个人把同一块砖,搬了多次
	private int count;
	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	public Move(int count) {
		super();
		this.count = count;
	}

	public Move() {
		super();
		// TODO Auto-generated constructor stub
	}

/* synchronized */	void MovBricks() {
	//加锁后,必须等一个方法执行完后才能执行
		this.count--;
		//搬砖的方法
	}

	@Override
	public void run() {
		for (int i = 0; i < 30; i++) {				
				MovBricks();
				System.out.println(Thread.currentThread().getName()+":搬了第"+i+"砖");
				try {
					Thread.sleep(20);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
		}
		
	}

}
怎么记忆synchronized这个单词:
syn    chrom    nice
取cyn  chron   nize
cyn   chro n   n ize
​		(两个n就是一个m)

线程同步:
1:范围不同:(锁方法,与锁方法里的代码块的区别:)

  • 锁方法是整个方法不能被共同使用(锁的范围大)
  • 锁代码块是方法里面只有一点点的代码需要被锁,加锁的前置或后置代码是不必要被锁的,可以提高被锁的效率
    2:不同步可能出现的问题(竞态条件)

线程的生命周期

1:新建 NEW:new创建线程对象
2:就绪 : 调用start方法后,得到了除CPU时间以外的所有资源
3:运行 : 获得CPU时间,进入运行状态
4:阻塞/等待 : 遇到sleep、yield、wait等等
5:结束 : 中断或者执行结束

线程属性及常用方法
属性: name\id\priority\daemon
常用方法:
static currentThread
static sleep 休眠
yield
static dumpStack
join

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值