假设我有两个数组:
int[] array1 = new int[2000000];
int[] array2 = new int[2000000];
Run Code Online (Sandbox Code Playgroud)
我将一些值粘贴到数组中,然后想将array2的内容添加到array1,如下所示:
for(int i = 0; i < 2000000; ++i) array1[i] += array2[i];
Run Code Online (Sandbox Code Playgroud)
现在,假设我想在多处理器机器上加快处理速度,所以我不是像上面那样进行循环,而是创建两个线程.其中一个我处理了数组中的前1000000个元素,另一个我处理了数组中的最后1000000个元素.我的主线程等待这两个线程通知它已完成,然后继续使用array1中的值来处理各种重要的事情.(请注意,两个工作线程可能不会被终止并且可能会被重用,但主线程将不会恢复,直到它们都通知它为止.)
所以,我的问题是:我如何确定主线程将看到两个工作线程对数组所做的修改?我可以指望这种情况发生吗?或者我是否需要通过一些特殊的过程来确保工作线程刷新它们对数组的写入并且主线程丢弃其缓存的数组值?
1)我使用Java调用Linux终端来运行foo.exe并将输出保存在文件中:
String[] cmd = {"/bin/sh", "-c", "foo >haha.file"};
Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)
2)问题是当我打算稍后在代码中阅读haha.file时,它尚未编写:
File f=new File("haha.file"); // return true
in = new BufferedReader(new FileReader("haha.file"));
reader=in.readLine();
System.out.println(reader);//return null
Run Code Online (Sandbox Code Playgroud)
3)只有在程序完成后才会写入haha.file.我只知道如何冲洗"作家",但不知道如何冲洗...... 像这样.如何强制java在终端中写入文件?
在此先感谢EE
如果设置了FlushMode.AUTO,当我调用session.close()时,Hibernate会刷新我更新的持久对象吗?
我知道session.close()通常不会刷新会话但我不确定FlushMode.AUTO如何影响这个.
来自Docs:
FlushMode.AUTO
会话有时在查询执行之前刷新,以确保查询永远不会返回失效状态.这是默认的刷新模式.
这是否意味着我可以依赖Hibernate来验证我的更改有时会在我的会话关闭之前刷新?
小代码示例:
Session session = HibernateSessionFactory.getSession();
PersistedObject p = session.get(PersistedObject.class,id);
p.setSomeProperty(newValue);
session.close();
Run Code Online (Sandbox Code Playgroud)
更新
根据文档,这些是会话将刷新的地方(使用AUTO时)
这没有说明Session.close()
我正在研究用Java编写的网络应用程序,在套接字上使用ObjectOutputStream和ObjectInputStream来交换消息.我的代码看起来像这样:
发件人:
ObjectOutputStream out;
ObjectInputStream in;
try{
Socket socket=new Socket(address, port);
socket.setSoLinger(true, socketLingerTime);
out=new ObjectOutputStream(socket.getOutputStream());
out.writeObject(message);
out.flush();
out.close();
}catch (variousExceptions)...
Run Code Online (Sandbox Code Playgroud)
接收器:
Object incoming;
try{
incoming=myObjectInputStream.readObject();
}catch (SocketException socketError)
{
if (socketError.getMessage().equals("Connection reset"))
{
//this is the exception I get
}
}
Run Code Online (Sandbox Code Playgroud)
有时消息会通过ok,但有时我会得到标记的异常而不是对象.是不是应该强制将消息强制传递给另一方?我以某种方式错误地使用该功能?或者这是底层Java/OS网络代码中的某种错误?
谢谢!
更新:
我已经对此做了更多的窥探,似乎只有当系统的资源被某些东西征税时才会发生.我无法在VirtualBox之外复制它,但这可能只是因为VirtualBox没有很多资源可以开始.当我进一步研究它时,我会更新这个问题.
我有一个ASP.NET MVC页面,其中包含一个表,每行需要一些时间来加载.所以我Response.Flush()在每一行渲染后都在调用.
IE9的行为方式应该是:逐行显示行.另一方面,FF4仅在完全加载完成后显示页面,即使我在FireBug的"网络"选项卡中可以看到逐行接收行.
在服务器端有什么我可能做错的吗?如果没有,我可以对我的Firefox做些什么,以便它以我想要的方式显示页面?
我使用Rcpp(具体而言RcppArmadillo)编写了一个MCMC采样器.我希望我的采样器将定期状态消息打印到R控制台,但是当采样器终止时,消息会立即显示.输出语句是:
Rcout << "Progress => "
<< double(iterations) / double(maxit) * 100
<< "%"
<< std::endl;
Run Code Online (Sandbox Code Playgroud)
可以增加此代码,以便其输出立即显示在R控制台上吗?
R版本:2.14.1
平台:达尔文9.8.0
Rcpp版本:0.9.10
我必须使用hibernate将大量对象保存到数据库中.我想在会话中出现n(BATCH_SIZE)对象时提交,而不是一次提交所有这些对象.
Session session = getSession();
session.setCacheMode(CacheMode.IGNORE);
for(int i=0;i<objects.length;i++){
session.save(objects[i]);
if( (i+1) % BATCH_SIZE == 0){
session.flush();
session.clear();
}
}
Run Code Online (Sandbox Code Playgroud)
我会尝试类似上面的东西,但我读到session.flush()它没有提交数据库的更改.这是以下代码正确的方法吗?
Session session = getSession();
session.setFlushMode(FlushMode.COMMIT);
session.setCacheMode(CacheMode.IGNORE);
session.beginTransaction();
for(int i=0;i<objects.length;i++){
session.save(objects[i]);
if( (i+1) % BATCH_SIZE == 0){
session.getTransaction().commit();
session.clear();
//should I begin a new transaction for next batch of objects?
session.beginTransaction();
}
}
session.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud) 我遇到了PHP问题 ob_flush();
好像它只在IE10中不起作用.
gzip和缓存在服务器上被禁用,它可以在IE10以外的任何地方使用.
如果有人知道如何解决这个谜,我将不胜感激!:)
谢谢!
为什么fflush(..)不工作,c2和c0?
如果我使用声明c0 = 0并且c2 = 0它可以工作,但是fflush(stdin)不起作用,我试图放在不同的地方,但它没有用,我在ubuntu 13.04中使用代码块;
int main(void)
{
int cod ,passou = 0, c0, c1, c2, c3, ct;
float p1, p2, p3;
char o;
do {
puts ("Informe codigo: ");
scanf ("%i", &cod);
fflush (stdin);
switch (cod)
{
case 0:
c0 = c0 + 1;
break;
case 1:
c1 = c1 + 1;
ct = ct + 1;
break;
case 2:
c2 = c2 + 1; …Run Code Online (Sandbox Code Playgroud) 如何FlushMode.ALWAYS在Spring Boot应用程序中设置所有会话?有这个设置会很好application.yml.
UPDATE
我在application.yml中尝试了两种方法:
spring.jpa.properties.org.hibernate.flushMode: ALWAYS
spring.jpa.org.hibernate.flushMode: ALWAYS
Run Code Online (Sandbox Code Playgroud)
然而下一个代码:
Session ses = factory.openSession();
ses.setFlushMode(FlushMode.ALWAYS);
LOG.debug("!!!Session.FlushMode = " + ses.getFlushMode());
LOG.debug("!!!NewSession.FlushMode = " + factory.openSession().getFlushMode());
Run Code Online (Sandbox Code Playgroud)
得到:
DEBUG 47225 --- : !!!Session.FlushMode = ALWAYS
DEBUG 47225 --- : !!!NewSession.FlushMode = AUTO
Run Code Online (Sandbox Code Playgroud)