计算机中的颗粒度(granularity)什么是颗粒度?

颗粒度越细,表示细节越详尽,越有助于了解事情的全貌
颗粒度越粗,表示细节越少,更多的是抽象概括。

java多线程中就有颗粒度

/*
     * 小结:
     * 同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁,很明显,同步方法锁的范
     * 围比较大,而同步代码块范围要小点,一般同步的范围越大,性能就越差,一般需要加锁进行同步的时候,肯
     * 定是范围越小越好,这样性能更好
     *
     * 同步代码块可以用更细粒度的控制锁
     *
     * 使用同步块,可以减小线程同步的粒度,线程同步的粒度越小越好,即线程同步的代码块越小越好
     */

MoneyBox类(储钱罐类)

package com.demo.threadmessage1;
 
//线程间通信的案例,主要是wait()、notify()、notifyAll()这3个函数,这3个函数都是Object类的方法
//sleep()是Thread类的方法
//存钱罐类
public class MoneyBox {
	
	//存钱罐中的余额
	private double money;
	
	public double getMoney() {
		return money;
	}
 
	// 构造函数 /构造方法/构造器
	public MoneyBox(double money) {
		this.money = money;
	}
	
	//这是存钱的方法,加上synchronized(同步)关键字,写成同步块
	public void add(double inMoney, String threadName, int number) {
		 try {
			 //故意让当前线程睡眠会以使别的线程操作它(为了制造张无忌存钱的速度没有赵敏取钱的速度快)
			Thread.sleep(80);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		//使用同步块,可以减小线程同步的粒度,线程同步的粒度越小越好,即线程同步的代码块越小越好
		 /*
		  * 同步代码块可以用更细粒度的控制锁,同步方法锁的范围比较大,而同步代码块范围要小点,一般同步的范围越
		  * 大,性能就越差,一般需要加锁进行同步的时候,肯定是范围越小越好,这样性能更好
		  */
		 synchronized(this){
			 money += inMoney;
			 System.out.println("-------" + threadName + "第" + number + "次存了" + inMoney + "元,现在存钱罐中的余额=" + money);
			 notifyAll();// 唤醒/通知前期挂起的所有线程
		 }
	}
	
	//这是取钱的方法,加上synchronized(同步)关键字,写成同步方法
		public synchronized void get(double outMoney, String threadName, int number) {
			while (money < outMoney) {//说明要取的金额超过了存钱罐中的余额
				System.out.println("######" + threadName  + "第" + number + "次取钱,打算取" + outMoney + "元,但是现在存钱罐中的余额=" + money + ",要取的金额超过了存钱罐中的余额,请你等待......");
				try {
					wait();//让当前线程处于等待状态,即线程挂起(线程处于挂起状态)
					System.out.println("######" + threadName  + "第" + number + "次取钱时的等待结束......,继续第" + number + "次取钱");
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			 money -= outMoney;
			 System.out.println("$$$$$$$" + threadName + "第" + number + "次取了" + outMoney + "元,现在存钱罐中的余额=" + money);
		}
 
		@Override
		public String toString() {
			return "---------------我是存钱罐,我现在的余额=" + money + "---------------";
		}
		
	/*
	 * 小结:
	 * 同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁,很明显,同步方法锁的范
	 * 围比较大,而同步代码块范围要小点,一般同步的范围越大,性能就越差,一般需要加锁进行同步的时候,肯
	 * 定是范围越小越好,这样性能更好
	 * 
	 * 同步代码块可以用更细粒度的控制锁
	 * 
	 * 使用同步块,可以减小线程同步的粒度,线程同步的粒度越小越好,即线程同步的代码块越小越好	
	 */
		
	
 
}

https://zhuanlan.zhihu.com/p/65220106

发布了624 篇原创文章 · 获赞 582 · 访问量 125万+

猜你喜欢

转载自blog.csdn.net/czh500/article/details/104838668