- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Client 类调用 MyService 类的 execute 方法。此方法将依次调用 InsertDAO 类。此 InsertDAO 具有带有实例变量的状态。这仅从 MyService 类的 execute 方法调用。不能直接调用 InsertDAO 类。
我没有创建任何线程,但我的 App Server 可能会在 Client 类上创建线程。现在,我想了解这将如何影响 InsertDAO 类。
请专家们谈谈你的看法。下面是我的代码。
//code starts here
public class Client{
public void performExecution(){
InvoiceVO createInvoiceVO = new InvoiceVO();
MyService service = new MyService();
createInvoiceVO = service.execute(createInvoiceVO);
//retrieve successful/failure information from createInvoiceVO
}
}
public class MyService{
public InvoiceVO execute(InvoiceVO createInvoiceVO){
InsertDAO insertDAO = new InsertDAO();
insertDAO.process(createInvoiceVO);
}
}
public class InsertDAO{
private List<LineItem> lineItemsList = new ArrayList<LineItem>();
private List<TaxVO> taxVOList = new ArrayList<TaxVO>();
private Connection connection = null;
public InvoiceVO process(InvoiceVO createInvoiceVO){
this.lineItemsList = createInvoiceVO.getLineItemsList();
this.taxVOList = createInvoiceVO.getTaxVOList();
connection = getConnection();
//insert tax vo objects
insertTaxVOObjects(taxVOList);
//insert line items
insertLineItems(this.lineItemsList);
//commit operation
//close connection
closeConnection();
}
private void insertTaxVOObjects(List<TaxVO> taxVOList){
//code to insert TaxVO objects
}
private void insertLineItems(List<LineItem> lineItemsList){
//code to insert LineItem objects
}
private void getConnection(){
//code to return connection
}
private void closeConnection(){
//code to close connection
}
}
最佳答案
你问的问题不对,线程不进入类,它们进入对象;我们需要查看对象的生命周期以及何时创建线程。
现在我不了解您的执行环境 - 我不清楚线程是在哪里创建的,但我假设以某种方式创建了客户端对象,并且每个对象的 performExecution() 方法可能在其自己的线程上运行。现在的问题是,您的任何一个 InsertDAO 对象是否可能同时从两个线程访问,或者两个 InsertDAO 对象是否可能共享一些数据,因此两个线程可能会发生干扰。
现在我们首先注意到每个 InsertDAO 对象都是独立的,它们有变量但这些变量不是静态的。例如你有
this.lineItemsList
因此数据由单个对象实例拥有,没有其他对象(可能在另一个线程中)可以看到附加到 this 的数据。请注意,如果您有静态 数据,所有实例都可以看到它,您就会遇到问题。第一条规则:没有静态数据,除非您使用同步访问来保护它。
您遇到潜在问题的一个地方是您请求连接。现在连接通常是池化的,我们真的不想为每个请求都打开一个连接,而是我们从池中获取一个连接并在我们使用它时返回。整个想法是线程共享同一个池。所以这里的一般原则是,你的 InsertDAO 对象使用的任何它们没有作为成员变量的东西都必须是线程安全的,也就是说作者必须在多线程访问的期望中编写它它。共享池:作者必须使用某种同步访问。规则 2:看看您使用的是什么以及您自己的代码。
最后一点,两个线程可以共享一个 InsertDAO 对象吗?要回答这个问题,请查看您是如何创建它们的:
public InvoiceVO execute(InvoiceVO createInvoiceVO){
InsertDAO insertDAO = new InsertDAO();
insertDAO.process(createInvoiceVO);
}
在这里你创建对象,调用它的方法并返回(隐式释放对象),没有其他线程可以看到这个,它在你的堆栈上是本地的。因此我们知道只有一个线程使用一个 InsertDAO 对象。规则三:由调用者决定有多少线程可以看到一个对象。在您的情况下,您已经确保了一个线程。
关于java - 多个Thread可以进入InsertDAO吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22087212/
如果我 mov, eax 12345 和之后的 mov var, eax (假设 var 是一个 32 位的 int 等..等等)并输出 var 稍后它会正确输出。 与 ax 相同。 mov ax,
我有这个代码: for($nrt=0; $nrt"; if($sidesIndexes[$nrt]==$nrt) { echo "am I in??? ".$sidesInde
我正在阅读The Go Programming Language的8.5章,并陷入一些代码。下面的代码列表。 func main() { naturals := make(chan int)
我写了一个 MySQL 查询用于将数据导出到文本文件。 查询运行成功,但结果与我的预期不符。 我想在列之间没有间距的结果。 select sample_export_record1_2013.
在普通的 Excel 窗口中,我可以打开 VBE 并通过触摸键序列插入一个新模块:ALT+F11、ALTim 全部不使用鼠标。有没有办法打开 VBE 并导航到 本工作手册 不使用鼠标的代码区域? 最佳
我正在使用 axios 发出 http 请求。在 .then() 内部,我正在使用另一个 axios 调用。最后,我有第三个 then(),它应该在第二个 then 之后运行,但实际上并没有这样做。
我需要在 cocos2d 项目中播放视频..我的问题是:如何将 MPMoviePlayerController 放入我的 View 中,如下所示:? UIView *theView = [[CCDir
我正在学习 Angular。以下代码有效: .controller('abc', function ($scope, $http) { $http.get("/Handlers/Authenticat
目前我正在使用 WPF 学习 C#。我的主要方法是尽我所能使用 MVVM 模式,但现在我有点困惑。 在我所有 View 的应用程序中,我有一个 View 模型: private DruckviewVi
关于将 G 邮件提取到 Google 电子表格,我该如何添加 IF 以按主题驳回特定电子邮件?例如:电子邮件回复(主题中带有“RE:”)。我不希望这些电子邮件出现在我的电子表格中。 我尝试过使用 LO
我正在尝试使用 Spotify API 并进入数组。 const App = () => { const [isLoading, setIsLoading] = useState(true);
我有一个 html 模板,并且有一个条件为 --> 的代码 --> window.jQuery || document.write(""+"");
我正在开发一个 Android 应用程序,该应用程序会暴力破解从 int 创建的 MD5 和。 暴力破解部分工作正常。 (我可以sysout最终值并且它是正确的。) 我在将输出值发送到警报对话框时遇到
我正在创建一个界面,用户可以通过该界面生成多系列折线图,并控制绘制哪些数据集。 要绘制哪些数据集由复选框控制。页面加载时,默认数据集以图表形式呈现,并且 $('input:checkbox.data-
我尝试将有向无环图绘制为力布局。 但是我注意到,尽管为每个组元素灌输了进入/退出条件,弹出的节点/链接并没有从 DOM 中删除它们自己。 相反,弹出的节点/链接在力布局中卡住;这意味着没有调用进入/退
这里是新手。我不知道它是怎么发生的,但我正在处理一个程序,当我去调试并进入时,黄色箭头走到了我代码的最后并跳过了整个 block 。有快速解决方法吗? 最佳答案 按 F11,或单击工具栏上的“Step
我的 Action 栏 sherlock 中有一个列表。我想在用户点击该列表时得到。我不想知道用户何时点击某个项目,我已经知道 (onNavigationItemSelected)。 在我的 onCr
** 你好 **我如何从 ci 中的 mysql 日期获取 eurodate 来工作......无法弄清楚 - 请帮忙 想要获取日期 YY-mm- dd -> dd-mm-yy提前致谢 最佳答案 $t
我有以下脚本: #!/bin/bash ls -1 | while read d do [[ -f "$d" ]] && continue echo $d cd $d done
TL;DR - 跳转到最后一段 背景 我正在执行一些数据驱动测试,并将日志文件用作测试输出之一。它的工作原理是这样的- 读取文件夹中的第一个文件 处理第一行并转换为测试 运行测试 执行验证 1 ...
我是一名优秀的程序员,十分优秀!