进程池进程执行顺序

山口山 2011-09-29 08:18:33

pullic class ThreadCooperation
{
public static void main(String[] args)
{
ExecutorService executor = Executors.newFixedThreadPool(2);
//DepositTask、WithdrawTask是实现了Runnable接口的类,都定义了run()方法。
executor.execute(new DepositTask());
executor.execute(new WithdrawTask());
System.out.println("...(略)");
}
}

这是main函数的一部分,在运行程序的时候,总是main函数的println方法先打印,再是进程池的两个进程打印出来。不解!
...全文
194 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
山口山 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 aqqbjlgu 的回复:]

线程执行顺序是CPU决定的,你可以让main所在线程sleep久点!
[/Quote]
我试了一下,在println前加了几句:

try
{
Thread.sleep(1000);
}
catch(Exception e){}

最后的结果显示先其他线程的println执行,后再是main线程的println执行。
可为什么原来的程序一直是main线程呢,是不是先运行main线程,运行到启动其他线程的时候,main线程时间片还没到期.所以先出System.out.println?
山口山 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]

你这是线程池,不是进程池,Java 是以单进程方式运行的,呵呵。
[/Quote]
嗯,老是搞混了……
aqqbjlgu 2011-09-30
  • 打赏
  • 举报
回复
线程执行顺序是CPU决定的,你可以让main所在线程sleep久点!
aqqbjlgu 2011-09-30
  • 打赏
  • 举报
回复
线程执行顺序是CPU决定的!要其余线程先执行的话,可以要main方法所在线程sleep()久点!
山口山 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mengxiangyue 的回复:]

楼主java支持的是抢占式的进程调度,但是java虚拟机是运行在操作系统上的,操做系统就会有时间片原则,是因为时间片的原则引起的,楼主不懂时间片的话可以百度下
[/Quote]
但问题就在这:main中的println方法也有可能在DepositTask线程或者WithdrawTask线程之后执行,可运行结果总是main的println最先执行……
是mian优先级别更高么?
山口山 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]

你这是线程池,不是进程池,Java 是以单进程方式运行的,呵呵。
[/Quote]
嗯,我搞混了。我的疑问是:解释器给main方法启动了个线程,既然这三个线程共享CPU时间,那main中的println不是在另外两个线程执行后执行也有可能么?但输出结果老是main的println在最前面……
thegodofwar 2011-09-30
  • 打赏
  • 举报
回复
在你的电脑是单核的情况下,main线程确实优先执行,即使你在主线程里加了Thread.sleep(xxx);它实际上也是最先执行main线程的,只不过是main线程发现自己要睡会有空闲段,所以才去执行其他子线程,但是如果你的电脑是多核的,这种情况就不一定了,你可以用多核电脑试试(曾经碰到过,个人总结,不权威阿)
  • 打赏
  • 举报
回复
你这是线程池,不是进程池,Java 是以单进程方式运行的,呵呵。
孟祥月 2011-09-29
  • 打赏
  • 举报
回复
楼主java支持的是抢占式的进程调度,但是java虚拟机是运行在操作系统上的,操做系统就会有时间片原则,是因为时间片的原则引起的,楼主不懂时间片的话可以百度下
山口山 2011-09-29
  • 打赏
  • 举报
回复
为什么是main函数的println先执行呢?
山口山 2011-09-29
  • 打赏
  • 举报
回复

import java.util.concurrent.*;
import java.util.concurrent.locks.*;
public class ThreadCooperation
{
private static class Account
{
private static Lock lock=new ReentrantLock();
private static Condition newDeposit=lock.newCondition();
private int balance=0;
public int getBalance()
{
return balance;
}
public void withdraw(int amount)
{
lock.lock();
try
{
while(balance<amount)
newDeposit.await();
balance-=amount;
System.out.println("\t\t\tWithdraw"+amount+"\t\t"+getBalance());
}
catch(Exception e)
{
}
finally
{
lock.unlock();
}
}
public void deposit(int amount)
{
lock.lock();
try
{
balance+=amount;
System.out.println("Deposit"+amount+"\t\t\t\t\t"+getBalance());
newDeposit.signalAll();
}
finally
{
lock.unlock();
}
}
}
private static Account account=new Account();

public static class DepositTask implements Runnable
{
public void run()
{
try
{
while(true)
{
account.deposit((int)(Math.random()*10)+1);
Thread.sleep(1000);
}
}
catch(Exception e)
{
}
}
}
public static class WithdrawTask implements Runnable
{
public void run()
{
while(true)
account.withdraw((int)(Math.random()*10)+1);
}
}
public static void main(String[] args)
{
ExecutorService executor=Executors.newFixedThreadPool(2);
executor.execute(new DepositTask());
executor.execute(new WithdrawTask());
executor.shutdown();
System.out.println("Thread 1\t\tThread 2\t\tBalance");
}
}

这是完整的程序
内容概要:本文提出一种基于鱼鹰优化算法(OOA)优化的CNN-BiGUR-Attention混合模型,用于提升短期风电功率预测的精度与稳定性,采用Matlab实现代码仿真。该模型融合卷积神经网络(CNN)提取输入数据的局部空间特征,利用双向门控循环单元(BiGUR)捕捉风速、功率等时间序列的前后向动态依赖关系,并引入注意力机制自适应强化关键时间步的特征权重,从而增强模型对非平稳风电数据的表征能力;进一步,采用OOA算法对模型超参数进行全局寻优,有效提升模型收敛速度与泛化性能。研究基于实际风电场历史数据开展实验验证,结果表明,该方法相较传统模型在预测精度、鲁棒性和误差抑制方面表现更优,适用于高比例可再生能源接入背景下的电力系统调度需求。; 适合人群:从事新能源发电预测、电力系统优化调度、智能算法与深度学习融合应用等方向的科研人员及工程技术人员,尤其适合具备Matlab编程能力、熟悉时间序列建模与深度学习框架的研究者。; 使用场景及目标:①实现风电场短期功率高精度预测,支撑电网安全稳定调度与能量管理;②为深度学习模型结构设计与智能优化算法联合调参提供实践范例;③推动人工智能技术在可再生能源预测、智能电网运行等领域的落地应用。; 阅读建议:建议结合提供的Matlab代码深入理解CNN-BiGUR-Attention网络架构搭建、注意力机制实现方式及OOA优化流程,重点关注数据预处理、模型训练与参数调优细节,可通过替换不同风电数据集进行对比实验,进一步掌握模型迁移能力与适应性。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧