Java中的线程,状态?还有,正确的使用方法是什么?
我后天就要参加考试了,所以我需要在考试前搞清楚,希望你们能帮我 首先,我确实知道线程有4种状态(即运行、就绪、阻塞、终止),但是我不太确定它在Java中是如何工作的。在我的代码中,我使用thread.sleep(3000)在程序中进行一些等待,这会使线程阻塞还是准备就绪 我还注意到,我可能没有以正确的方式使用线程,让我向您展示一些代码Java中的线程,状态?还有,正确的使用方法是什么?,java,multithreading,computer-science,Java,Multithreading,Computer Science,我后天就要参加考试了,所以我需要在考试前搞清楚,希望你们能帮我 首先,我确实知道线程有4种状态(即运行、就绪、阻塞、终止),但是我不太确定它在Java中是如何工作的。在我的代码中,我使用thread.sleep(3000)在程序中进行一些等待,这会使线程阻塞还是准备就绪 我还注意到,我可能没有以正确的方式使用线程,让我向您展示一些代码 public class BattleHandler implements Runnable { private Player player; private
public class BattleHandler implements Runnable {
private Player player;
private Monster enemyMonster;
private Dungeon dungeon;
private JTextArea log;
private GameScreen gScreen;
public void run() {
try {
runBattle();
}
catch(Exception e) { System.out.println(e);}
}
public BattleHandler(Player AttackingPlayer, JTextArea log, GameScreen gScreen) {
this.player = AttackingPlayer;
this.log = log;
this.gScreen = gScreen;
}
public void setDungeon(Dungeon dungeon) {
this.dungeon = dungeon;
}
public Dungeon getDungeon() {
return dungeon;
}
public Monster getEnemyMonster() {
return enemyMonster;
}
public void setMonster() {
// First check if dungeon have been init, if not we can't generate the mob
if(dungeon != null) {
enemyMonster = new Monster();
// Generate monster stats
enemyMonster.generateStats(dungeon);
}else {
System.out.println("Dungeon was not initialized");
}
}
public void runBattle() throws InterruptedException {
// Start battle, and run until a contester is dead.
while(player.getHealth() > 0 && enemyMonster.getHealth() > 0) {
int playerStrikeDmg = player.strike();
if(enemyMonster.blockDefend()) {
log.setText( log.getText() + "\n" + player.getName() +" tried to strike " + enemyMonster.getName()+ ", but " + enemyMonster.getName() + " Blocked.");
}else if(enemyMonster.dodgeDefend()) {
log.setText( log.getText() + "\n" + player.getName() +" tried to strike " + enemyMonster.getName()+ ", but " + enemyMonster.getName() + " Blocked.");
}else {
enemyMonster.defend(playerStrikeDmg);
log.setText( log.getText() + "\n" + player.getName() +" strikes " + enemyMonster.getName()+ " for: " + playerStrikeDmg + " left: "+ enemyMonster.getHealth());
}
if(enemyMonster.getHealth() < 1) break;
Thread.sleep(3000);
// Monster Turn
int monsterDmg = enemyMonster.strike();
if(player.blockDefend()) {
log.setText( log.getText() + "\n" + enemyMonster.getName() +" tried to strike " + player.getName()+ ", but " + player.getName()+ " Blocked.");
}else if(player.dodgeDefend()) {
log.setText( log.getText() + "\n" + enemyMonster.getName() +" tried to strike " + player.getName()+ ", but " + player.getName()+ " Dodged.");
}else {
player.defend(monsterDmg);
log.setText( log.getText() + "\n" + enemyMonster.getName() +" strikes " + player.getName()+ " for: " + monsterDmg + " left: "+ player.getHealth());
}
gScreen.updateBot();
Thread.sleep(3000);
}
公共类BattleHandler实现可运行{
私人玩家;
私人怪物敌人怪物;
私人地牢;
私人区域日志;
私人游戏屏幕;
公开募捐{
试一试{
runBattle();
}
catch(异常e){System.out.println(e);}
}
公共战场处理程序(玩家攻击玩家、JTextArea日志、GameScreen gScreen){
this.player=攻击型玩家;
this.log=log;
this.gScreen=gScreen;
}
公共无效地下城(地下城){
this.dungeon=地牢;
}
公共地下城getDungeon(){
返回地牢;
}
公共怪物getEnemyMonster(){
返回敌人怪物;
}
公共空间设置怪物(){
//首先检查地下城是否已经初始化,如果没有,我们无法生成怪物
如果(地牢!=null){
enemyMonster=新怪物();
//生成怪物统计数据
敌人怪物。生成者(地牢);
}否则{
System.out.println(“地牢未初始化”);
}
}
public void runBattle()引发InterruptedException{
//开始战斗,一直跑到一个参赛者死亡。
while(player.getHealth()>0&&enemyMonster.getHealth()>0){
int playerStrikeDmg=player.strike();
if(enemyMonster.blockdefect()){
log.setText(log.getText()+“\n”+player.getName()+”试图攻击“+enemyMonster.getName()+”,但“+enemyMonster.getName()+”被阻止。”);
}else if(enemyMonster.dodgedefect()){
log.setText(log.getText()+“\n”+player.getName()+”试图攻击“+enemyMonster.getName()+”,但“+enemyMonster.getName()+”被阻止。”);
}否则{
敌人怪物。防御(玩家攻城);
log.setText(log.getText()+“\n”+player.getName()+“打击”+enemyMonster.getName()+“针对:“+playerStrikeDmg+”左:“+enemyMonster.getHealth()”);
}
如果(enemyMonster.getHealth()<1)中断;
睡眠(3000);
//怪兽回合
int monsterDmg=enemyMonster.strike();
if(player.blockdefect()){
log.setText(log.getText()+“\n”+enemyMonster.getName()+”试图攻击“+player.getName()+”,但“+player.getName()+”被阻止。”);
}else if(player.dodgedefect()){
log.setText(log.getText()+“\n”+enemyMonster.getName()+”试图攻击“+player.getName()+”,但“+player.getName()+”躲闪了。”);
}否则{
玩家。防守(怪物DMG);
log.setText(log.getText()+“\n”+enemyMonster.getName()+“打击”+player.getName()+“为:“+monsterDmg+”左:“+player.getHealth()”);
}
gScreen.updateBot();
睡眠(3000);
}
当我编写此代码时,我认为它很酷,但我看到一些人创建了一个仅用于控制线程本身的类。我刚刚创建了一个使用Sleep的可运行类(代码中没有显示,但它是一个大类)
把这件事弄清楚会很好,所以我可以在他们问我之前指出,你知道的,拿走弹药
希望你们能帮我:)
Thx线程的数量超过4个。另外,我建议阅读更多关于线程的信息
请注意,如果您希望以设定的时间间隔执行任务,我强烈建议您使用该框架。线程多于4个。此外,我建议您阅读更多有关线程的信息
请注意,如果您希望以设定的时间间隔执行任务,我强烈建议您使用该框架。已阻止-在超时之前它根本不会运行。Ready是“现在可运行,但没有可用的处理器”将在处理器可用时立即运行。已阻止-在超时之前它根本不会运行。Ready Is“现在可以运行,但没有可用的处理器来运行它-一旦处理器可用,它就会运行。”正如所有其他人所说的,还有更多,下面是一个简单的列表:
正如所有其他人所说的,还有更多,这里有一个简单的列表:
runBattle()方法的实现在哪里?您的q是什么