「java线程切换」java线程切换时间

博主:adminadmin 2022-11-24 18:12:10 39

今天给各位分享java线程切换的知识,其中也会对java线程切换时间进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

多线程的java 程序如何编写?

Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

新建状态:

使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。

就绪状态:

当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。

运行状态:

如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。

阻塞状态:

如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。可以分为三种:

等待阻塞:运行状态中的线程执行 wait() 方法,使线程进入到等待阻塞状态。

同步阻塞:线程在获取 synchronized 同步锁失败(因为同步锁被其他线程占用)。

其他阻塞:通过调用线程的 sleep() 或 join() 发出了 I/O 请求时,线程就会进入到阻塞状态。当sleep() 状态超时,join() 等待线程终止或超时,或者 I/O 处理完毕,线程重新转入就绪状态。

死亡状态:

一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态。

java线程的几种状态

总结了6种状态,希望对你所有帮助:

1、NEW 状态是指线程刚创建, 尚未启动

2、RUNNABLE 状态是线程正在正常运行中, 当然可能会有某种耗时计算/IO等待的操作/CPU时间片切换等, 这个状态下发生的等待一般是其他系统资源, 而不是锁, Sleep等

3、BLOCKED  这个状态下, 是在多个线程有同步操作的场景, 比如正在等待另一个线程的synchronized 块的执行释放, 或者可重入的 synchronized块里别人调用wait() 方法, 也就是这里是线程在等待进入临界区

4、WAITING  这个状态下是指线程拥有了某个锁之后, 调用了他的wait方法, 等待其他线程/锁拥有者调用 notify / notifyAll 一遍该线程可以继续下一步操作, 这里要区分 BLOCKED 和 WATING 的区别, 一个是在临界点外面等待进入, 一个是在临界点里面wait等待别人notify, 线程调用了join方法 join了另外的线程的时候, 也会进入WAITING状态, 等待被他join的线程执行结束

5、TIMED_WAITING  这个状态就是有限的(时间限制)的WAITING, 一般出现在调用wait(long), join(long)等情况下, 另外一个线程sleep后, 也会进入TIMED_WAITING状态

6、TERMINATED 这个状态下表示 该线程的run方法已经执行完毕了, 基本上就等于死亡了(当时如果线程被持久持有, 可能不会被回收)

JAVA中怎么用线程实现图片的切换?

自己写的代码。能通过测试

题目中的要求用线程实现图片的切换

主要有两种方式可以实现。一种是Swing包下的Timer类。一种是Thread类

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class MousDemo extends JFrame {

MyJPanel mp;

int index;

ImageIcon[] imgs = { new ImageIcon("C:\\Users\\lenovo\\Desktop\\a.png"),

new ImageIcon("C:\\Users\\lenovo\\Desktop\\b.png") };

public MousDemo() {

mp = new MyJPanel(false);

this.add(mp);

this.setSize(300, 200);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setTitle("鼠标窗口");

this.setVisible(true);

/**

 * 方式一,使用TImer来切换图片

 * Swing下的Timer组件,个人觉得非常适合

 * Timer(200,new ActionListener());意思就是每200毫秒执行一次ActionListener里面的方法

 * */

Timer timer = new Timer(200,new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

mp.flag = !mp.flag;

mp.repaint();

}

});

timer.start();

/**

 * 方法二:

 * 线程的方式

 * */

// new Thread(new Runnable() {

//

// @Override

// public void run() {

// while(true){

// mp.flag = !mp.flag;

// mp.repaint();

// try {

// Thread.sleep(200);

// } catch (InterruptedException e) {

// e.printStackTrace();

// }

// }

//

// }

// }).start();

}

public static void main(String[] args) {

new MousDemo();

}

class MyJPanel extends JPanel{

boolean flag;

public MyJPanel(boolean flag) {

this.flag = flag;

}

@Override

public void paint(Graphics g) {

super.paint(g);

if(flag == false){

g.drawImage(imgs[0].getImage(), 0, 0,this);

}else{

g.drawImage(imgs[1].getImage(), 0, 0,this);

}

}

}

}

JAVA中,线程有哪五个基本状态?他们之间如何让转化?并简述线程周期。

java中,每个线程都需经历新生、就绪、运行、阻塞和死亡五种状态,线程从新生到死亡的状态变化称为生命周期。

用new运算符和Thread类或其子类建立一个线程对象后,该线程就处于新生状态。

线程的生命周期,把图转化为文字就是: 

1、线程通过new方法创建,调用start,线程进入就绪状态,等待系统的调度(时间片轮转调度)。当系统调度,进入运行状态。正常结束或者异常退出,进程进入死亡状态。

2、处于运行状态的线程若遇到sleep,则线程进入睡眠状态,不会让出资源锁,sleep结束,线程转为就绪状态,等待系统重新调度。

3、处于运行状态的线程可能在等待io,也可能进入挂起状态。io完成,转为就绪状态。

4、处于运行状态的线程yield,线程转为就绪状态。(yield只让给权限比自己高的)

5、处于运行状态的线程遇到wait,线程处于等待状态,需要notify()/notifyALL来唤醒线程,唤醒后的线程处于锁定状态,获取了“同步锁”,之后,线程才转为就绪状态。处于运行的线程synchronized,加上后 变成同步操作。处于锁定状态,获取了“同步锁”,之后,线程才转为就绪状态。

Java怎么切换线程呢?

线程之间不互相影响,我这样理解你的意思,现在两个线程,A、B,现在A线程 需要B线程的结果。是这个意思吗

java两个线程之间如何实现切换

仔细看看30 60关键点,跟sleep时间长短有关,短了可能来不及执行又换另一线程

public class Test extends Thread {

public static void main(String[] args){

new Test().start();

new Test().start();

new Test().start();

}

public void run(){

try{

for(int i=0;i100;i++){

System.out.println(getName()+":"+i);

if(i==30){

sleep(100);

}

if(i==60){

sleep(100);

}

}

}catch(Exception e){}

}

}

java线程切换的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java线程切换时间、java线程切换的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。