Java多线程-对象锁Synchronized之我见

正确理解Java中的多线程多Synchronized对我们学习多线程编程非常重要,下面的测试程序阐述了Java对象锁的特性,例子如下

Coding:

 

/**
 * 该例子程序是为了理解Java线程里面提供的同步关键字 synchronized 对象锁 synchronized
 * 获取的是对象锁,我们可以理解为对象的锁就一把,一旦一根线程获取之后另外一根线程就只能等待 以下的模拟是:
 * 
 * 当一根线程进入一个对象的synchrozied方法之后,另外的线程将无法同时在进入该
 * 对象其它的synchronized方法,但是可以进入该对象的其它非synchronized
 * 
 * 测试注意事项:
 * <li>1、由于线程执行的随机性,只要获取到锁的线程进入睡眠状态则其它线程就不能在其释放锁之前进入其它的同步方法</li>
 * <li>2、当狗开始叫先执行,那么吃的执行就会一直要等到叫执行完之后才能执行,而摇尾巴的方法不会受到锁的限制</li>
 * <li>3、调试可以自己修改随意选择一个休眠的线程,然后分析打印结果</li>
 * 
 * @author 吖大哥
 * @date Jun 1, 2014 4:43:17 PM
 */
public class ThreadTester {

	public static void main(String[] args) {

		// 前提同一只狗在同一时刻他的嘴巴只能干一件事,当然你一定要认为它边吃还能边叫,那我也没办法
		final DogAction dog = new DogAction("哈士奇0001");

		// 狂叫线程
		new Thread(new Runnable() {
			public void run() {
				dog.barking();
			}
		}).start();

		// 狂吃线程
		new Thread(new Runnable() {
			public void run() {
				dog.eating();
			}
		}).start();

		// 狂摇尾巴
		new Thread(new Runnable() {
			public void run() {
				dog.tailing();
			}
		}).start();
	}
}

// 狗的行为类
class DogAction {

	private String name;

	public DogAction(String name) {
		this.name = name;
	}

	public synchronized void barking() {
		try {
			System.out.println("----------------已获得锁啦----------------");
			Thread.currentThread().sleep(6000);
			System.out.println(name + "正在狂叫**************");
			System.out.println("----------------已释放锁啦----------------");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public synchronized void eating() {
		try {
			// Thread.currentThread().sleep(6000);
			System.out.println(name + "正在狂吃**************");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void tailing() {
		try {
			Thread.currentThread().sleep(200);
			System.out.println(name + "正在狂摇尾巴**************");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 执行结果:

----------------已获得锁啦----------------
哈士奇0001正在狂摇尾巴**************
哈士奇0001正在狂叫**************
----------------已释放锁啦----------------
哈士奇0001正在狂吃**************

 

执行中截图:



 

 

内容概要:本文详细介绍了如何利用Simulink进行自动代码生成,在STM32平台上实现带57次谐波抑制功能的霍尔场定向控制(FOC)。首先,文章讲解了所需的软件环境准备,包括MATLAB/Simulink及其硬件支持包的安装。接着,阐述了构建永磁同步电机(PMSM)霍尔FOC控制模型的具体步骤,涵盖电机模型、坐标变换模块(如Clark和Park变换)、PI调节器、SVPWM模块以及用于抑制特定谐波的陷波器的设计。随后,描述了硬件目标配置、代码生成过程中的注意事项,以及生成后的C代码结构。此外,还讨论了霍尔传感器的位置估算、谐波补偿器的实现细节、ADC配置技巧、PWM死区时间和换相逻辑的优化。最后,分享了一些实用的工程集成经验,并推荐了几篇有助于深入了解相关技术和优化控制效果的研究论文。 适合人群:从事电机控制系统开发的技术人员,尤其是那些希望掌握基于Simulink的自动代码生成技术,以提高开发效率和控制精度的专业人士。 使用场景及目标:适用于需要精确控制永磁同步电机的应用场合,特别是在面对高次谐波干扰导致的电流波形失真问题时。通过采用文中提供的解决方案,可以显著改善系统的稳定性和性能,降低噪声水平,提升用户体验。 其他说明:文中不仅提供了详细的理论解释和技术指导,还包括了许多实践经验教训,如霍尔传感器处理、谐波抑制策略的选择、代码生成配置等方面的实际案例。这对于初学者来说是非常宝贵的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值