线程同步

1)在java语言中,引入了对象互斥锁的概念,保证共享数据操作的完整性。每个对象都对应于一个可称为“互斥锁”的标记,这个标记保证在任一时刻,只能有一个线程访问对象
2)关键字synchronized来与对象的互斥锁联系。当某个对象synchronized修饰时,表明该对象在任一时刻只能由一个线程访问

public class TestSync implements Runnable { // 实现Runnable接口,要实现run()方法,是一个线程类
Timer timer = new Timer();

public static void main(String[] args) {
TestSync test = new TestSync();
Thread t1 = new Thread(test); // 启动线程t1
Thread t2 = new Thread(test); // new线程
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}

public void run() {
timer.add(Thread.currentThread().getName());
}
}

class Timer {
private static int num = 0;

public synchronized void add(String name) { //执行该段代码时,锁定当前对象
num++;
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
System.out.println(name + ", 你是第" + num + "个使用timer的线程");
}
/*public void add(String name) {
synchronized (this) { //锁定当前对象(this)
num++;
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
System.out.println(name + ", 你是第" + num + "个使用timer的线程");
}
}*/
}

死锁:两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去

public class TestDeadLock implements Runnable {
public int flag = 1; //成员变量
static Object o1 = new Object(), o2 = new Object();

public void run() {
System.out.println("flag=" + flag);
if (flag == 1) {
synchronized (o1) { //锁住01,等待资源
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (o2) { //锁住02,等02
System.out.println("1");
}
}
}
if (flag == 0) {
synchronized (o2) { //锁住02,等02
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (o1) { //锁住01
System.out.println("0");
}
}
}
}

public static void main(String[] args) {
TestDeadLock td1 = new TestDeadLock();
TestDeadLock td2 = new TestDeadLock();
td1.flag = 1;
td2.flag = 0;
Thread t1 = new Thread(td1);
Thread t2 = new Thread(td2);
t1.start();
t2.start();

}
}

其他线程可以自由访问非同步方法,并且可能对同步方法产生影响;加了同步效率可能降低,不加同步可能产生数据不一致

public class TT implements Runnable {
int b = 100;
//该方法锁定当前线程对象只针对本段代码,其他线程可以执行其他未被锁定方法,不能访问同步方法
public synchronized void m1() throws Exception {
b = 1000;
Thread.sleep(5000);
System.out.println("b = " + b);
}

public void m2() throws Exception {
System.out.println(b);
}

public void run() {
try {
m1();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws Exception {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();

Thread.sleep(1000);
tt.m2();
}
}
/* 1000 //当子线程访问m1()方法时被锁定,b被改为1000,睡眠5秒,当子线程被锁定时,主线程继续执行访问m2()方法
* b = 1000 //睡眠结束后继续子线程执行m1()方法
*/
public class TT implements Runnable {
int b = 100;

public synchronized void m1() throws Exception {
// Thread.sleep(2000);
b = 1000;
Thread.sleep(5000);
System.out.println("b = " + b);
}

public void m2() throws Exception {
Thread.sleep(2500);
b = 2000;
}

public void run() {
try {
m1();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws Exception {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();

tt.m2();
System.out.println(tt.b);
}
}
/* 2000 //当子线程访问m1()方法时被锁定,b被改为1000,睡眠5秒,当子线程被锁定时,主线程继续执行访问m2()方法,此时b被该为2000
b = 2000 //睡眠结束后继续子线程执行m1()方法,此时b已经被m2()改为2000
*/

public class TT implements Runnable {
int b = 100;
//该方法锁定当前线程对象只针对本段代码,其他线程可以执行其他未被锁定方法,不能访问同步方法
public synchronized void m1() throws Exception {
// Thread.sleep(2000);
b = 1000;
Thread.sleep(5000);
System.out.println("b = " + b);
}

public synchronized void m2() throws Exception {
Thread.sleep(2500);
b = 2000;
}

public void run() {
try {
m1();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws Exception { //首先执行main()方法
TT tt = new TT();
Thread t = new Thread(tt);
t.start(); //开始执行子线程,执行run(),即m1()方法

tt.m2(); //main()方法继续向下执行,执行m2()方法
//等m2()方法执行结束后再执行m1()方法
System.out.println(tt.b);//等m1()睡眠时打印
}
}
/* //m1()执行,则m2()不能执行 *
* 1000 //执行主线程
* b = 1000 //执行t线程
*/
【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)内容概要:本文介绍了基于蒙特卡洛和拉格朗日方法的电动汽车充电站有序充电调度优化方案,重点在于采用分散式优化策略应对分时电价机制下的充电需求管理。通过构建数学模型,结合不确定性因素如用户充电行为和电网负荷波动,利用蒙特卡洛模拟生成大量场景,并运用拉格朗日松弛法对复杂问题进行分解求解,从而实现全局最优或近似最优的充电调度计划。该方法有效降低了电网峰值负荷压力,提升了充电站运营效率与经济效益,同时兼顾用户充电便利性。 适合人群:具备一定电力系统、优化算法和Matlab编程基础的高校研究生、科研人员及从事智能电网、电动汽车相关领域的工程技术人员。 使用场景及目标:①应用于电动汽车充电站的日常运营管理,优化充电负荷分布;②服务于城市智能交通系统规划,提升电网与交通系统的协同水平;③作为学术研究案例,用于验证分散式优化算法在复杂能源系统中的有效性。 阅读建议:建议读者结合Matlab代码实现部分,深入理解蒙特卡洛模拟与拉格朗日松弛法的具体实施步骤,重点关注场景生成、约束处理与迭代收敛过程,以便在实际项目中灵活应用与改进。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值