看下面一段代码,这段代码采用了模板设计模式
public abstract class IntGenerator {
private volatile boolean canceled=false;
public abstract int next();
public void cancel()
{ this.canceled=false;
}
public boolean isCanceled()
{
return this.canceled;
}
}
========================
//创建一个偶数生成类
public class EvenGenerator extends IntGenerator{
private int currentEvenValue=0;
@Override
public int next() {
// TODO Auto-generated method stub
++currentEvenValue;
++currentEvenValue;
return currentEvenValue;
}
public static void main(String[] args)
{
EvenChecker.test(new EvenGenerator());
}
}
===========================
创建一个测试类,启动10个线程,查看是否正确的访问资源
public class EvenChecker implements Runnable{
private IntGenerator generator;
private final int id;
public EvenChecker(IntGenerator generator,int id) {
// TODO Auto-generated constructor stub
this.generator=generator;
this.id=id;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(!generator.isCanceled())
{
int val=generator.next();
if(val%2!=0)
{
System.out.println(val+ " is not even!");
generator.cancel();//直到找到奇数时停止
}
else
{
//System.out.println(val+" is even!");
}
}
}
public static void test(IntGenerator gp,int count)
{
System.out.println("Press Ctrl+C to Exit");
ExecutorService exec=Executors.newCachedThreadPool();
for(int i=0;i<count;i++)
exec.execute(new EvenChecker(gp,i));
}
public static void test(IntGenerator gp)
{
test(gp,10);
}
}
//测试的结果是能打印出很多奇数,访问资源出错的原因是:next()方法本身不是原子方法,可能在一个线程对它进行第一个++操作之后,第二个线程已经取到它的值了
分享到:
相关推荐
通过这个命令,用户可以在不登录到远程计算机的情况下访问共享资源。 在标签中提到了“WinAPI”,这是指Windows API,它是开发Windows应用程序的核心,包含了各种系统调用、函数和结构,使得开发者能够编写与操作...
在默认设置下,为了防止不安全的网络设备或恶意攻击者未经身份验证就能访问共享资源,Windows会阻止这种行为,以此来保护用户的计算机免受潜在威胁。 要解决这个问题,你可以通过本地组策略编辑器来调整相关的安全...
已包含完整的freeRTOS依赖,可直观体验freeRTOS信号量的使用,代码方面主要通过未使用信号量访问共享资源的问题,以及使用信号量解决访问共享资源同步性的问题。 工程方面已经集成了freeRTOS的源码及相关信号量使用...
Windows操作系统内置了对这些协议的支持,使得设置和访问共享资源变得简单。 要获取局域网上的共享资源,首先确保计算机之间的网络连接正常。然后,可以通过以下步骤实现: 1. **共享设置**:在希望分享文件或...
【ASP.NET 访问共享网络资源详解】 在ASP.NET开发中,访问共享网络资源是一个常见的需求,尤其是在构建Web表单和Web服务时。微软的.NET框架提供了全新的用户认证和授权机制,但要充分利用这些功能,开发者需要理解...
在这个项目中,开发者通过UCOSIII实现了在STM32F767上的直接访问共享资源区的功能。这涉及到多线程环境下的并发控制,是嵌入式系统开发中的关键点。共享资源通常是指被多个任务或线程同时访问的数据,如全局变量、...
值得注意的是,不只Windows 10存在这个问题,Windows Server 2016等较新的服务器操作系统同样默认不启用SMBv1协议,因此在尝试访问旧版系统共享资源时也会遇到相同的问题。解决方法基本相同,即需要手动启用SMBv1...
通过正确地配置这些组件,可以实现安全、可靠的资源共享访问。 多域之间资源共享访问的优点是可以实现资源共享、提高工作效率和降低成本。但是,也需要注意安全问题,确保域之间的信任关系和访问权限的安全。 在...
这个项目提供的源代码可以作为学习和参考的宝贵资源,帮助开发者深入了解UCOSIII在STM32F429上的实际应用,以及如何在嵌入式系统中安全地管理和访问共享资源。通过实践,开发者能够提高自己的嵌入式编程技能,为未来...
在IT领域,尤其是在Windows系统开发中,VC++(Visual C++)是一种广泛使用的编程语言,用于构建各种应用程序,包括对操作系统级别的操作,如访问网络共享资源。本篇将详细讲解如何使用VC++来访问网络共享盘,并提供...
症状:安装了防火墙(包括WINXP系统自带的防火墙),出现无法Ping通,或者是访问共享资源的时候提示"XXX无法访问"、"您可能没有权限使用网络资源"、"请与这台服务器的管理员联系以查明您是否有访问权限"、"找不到...
共享资源管理系统是一种高效...总结,共享资源管理系统是现代工作和学习中不可或缺的工具,它不仅简化了资源的管理和共享,还提升了团队协作的效率。正确运用这类系统,可以有效地优化工作流程,推动创新和知识传播。
本文将详细介绍如何解决此类问题,确保用户能够正常访问网络资源。 #### 一、开启Guest账户并设置为空密码 1. **开启Guest账户**: - 打开“控制面板” > “用户账户” > “管理其他账户”,找到“Guest”账户并...
总之,STM32H750 UCOSIII实现使用信号量访问共享资源区的项目,不仅展示了如何在STM32H7系列单片机上成功部署和运行UCOSIII,还深入探讨了嵌入式系统中重要的同步与互斥机制。通过学习和实践这个项目,开发者可以...
// 访问共享资源的代码 } ``` 这段代码会确保在同一时刻只有一个线程可以执行`lock`块内的代码,从而实现互斥访问。 四、Mutex与跨进程同步 Mutex允许不同进程间的资源同步,常用于控制全局资源的访问。创建一个...
具体实现时,开发者可能需要定义一个信号量结构体,然后使用`OSMutexCreate()`函数创建信号量,接着在需要访问共享资源的代码段前后分别调用`OSMutexPend()`和`OSMutexPost()`来获取和释放信号量。这样,当一个任务...
通过上述任何一种方法,都能够有效解决“Win 7无法访问共享”的问题,恢复网络资源的正常访问权限。当然,在进行任何注册表操作前,强烈建议备份当前的注册表配置,以防万一。此外,定期检查系统更新和使用可靠的...
本项目主要关注如何在STM32F407上实现uC/OS-III,并且支持直接访问共享资源,这是在多任务环境中非常关键的一环。下面将详细讲解相关知识点: 1. **STM32F407与uC/OS-III集成**:首先,需要配置开发环境,包括安装...
任务之间可以通过信号量、互斥锁等机制实现同步和通信,确保共享资源的安全访问。例如,如果两个任务需要访问同一片RAM区域,可以使用互斥锁来防止数据竞争问题。 在实际项目中,STM32F103可能需要驱动一系列外设,...
4. 使用互斥锁:当任务需要访问共享资源时,先获取互斥锁,完成操作后再释放。这样其他任务在锁被占用期间将无法访问该资源,从而避免冲突。 5. 使用信号量:如果资源有限且需要按顺序访问,可以使用信号量。任务...