導航:首頁 > 編程語言 > javastateflag

javastateflag

發布時間:2025-01-13 01:51:15

java Thread BLOCKED和WAITING兩種狀態的區別

BLOCKED狀態
線程處於BLOCKED狀態的場景。
當前線程在等待一個monitor lock,比如等待執行synchronized代碼塊或者使用synchronized標記的方法。
在synchronized塊中循環調用Object類型的wait方法,如下是樣例
synchronized(this)
{
while (flag)
{
obj.wait();
}
// some other code
}
WAITING狀態
線程處於WAITING狀態的場景。
調用Object對象的wait方法,但沒有指定超時值。
調用Thread對象的join方法,但沒有指定超時值。
調用LockSupport對象的park方法。
提到WAITING狀態,順便提一下TIMED_WAITING狀態的場景。
TIMED_WAITING狀態
線程處於TIMED_WAITING狀態的場景。
調用Thread.sleep方法。
調用Object對象的wait方法,指定超時值。
調用Thread對象的join方法,指定超時值。
調用LockSupport對象的parkNanos方法。
調用LockSupport對象的parkUntil方法。

㈡ 關於java中的interrupt()方法疑問

當一個線程處於不可運行狀態時,如鍵盤輸入,調用Thread.join()方法或者Thread.sleep()方法,從而線程被阻塞了。調用interrupt()可以使一個被阻塞的線程拋出一個中斷異常,從而使線程提前結束阻塞狀態,退出堵塞代碼。
你可參照下http://daydayup1989.javaeye.com/blog/785581

㈢ 一個畫直線的JAVA小程序

//你的類我改了錯誤,現在可以用了

//有錯的地方我標了「//有錯」

//請認真看,我花了時間改的
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class DrawLine {

public static void main(String[] args) {

new MyFrame(200, 200, 300, 300);
}
}

class MyFrame extends Frame {

Point p = new Point();
Point q = new Point();
boolean flag;
ArrayList<Point> a1 = new ArrayList<Point>();
ArrayList<Point> a2 = new ArrayList<Point>();

MyFrame(int x, int y, int w, int h) {
super("drawline");
setBounds(x, y, w, h);
setBackground(Color.white);
Button b = new Button("Line");
add(b, BorderLayout.NORTH);
b.addActionListener(new ButtonMonitor());
addMouseListener(new MouseMonitor());
addWindowListener(new WindowMonitor());
setVisible(true);
}

class ButtonMonitor implements ActionListener {

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand() == "Line") {
flag = true;
}
repaint();
}
}

public void paint(Graphics g) {

Iterator<Point> i1 = a1.iterator();
Iterator<Point> i2 = a2.iterator();

while (i1.hasNext() && i2.hasNext()) {
p = i1.next();
q = i2.next();//有錯
Color c = g.getColor();
g.setColor(Color.red);
g.drawLine(p.x, p.y, q.x, q.y);
g.setColor(c);
}

}

public void addPoint1(Point p) {
a1.add(p);
}

public void addPoint2(Point p) {
a2.add(p);
}

class MouseMonitor extends MouseAdapter {

public void mousePressed(MouseEvent e) {

MyFrame my = (MyFrame) e.getSource();
addPoint1(new Point(e.getX(), e.getY()));//有錯 my->e
repaint();
}

public void mouseReleased(MouseEvent e) {//有錯mouseDragged->mouseReleased

MyFrame my = (MyFrame) e.getSource();
addPoint2(new Point(e.getX(), e.getY()));//有錯
repaint();
}
}

class WindowMonitor extends WindowAdapter {

@Override
public void windowClosing(WindowEvent e) {

setVisible(false);
System.exit(0);
}
}
}

閱讀全文

與javastateflag相關的資料

熱點內容
網路中常用的傳輸介質 瀏覽:518
文件如何使用 瀏覽:322
同步推密碼找回 瀏覽:865
樂高怎麼才能用電腦編程序 瀏覽:65
本機qq文件為什麼找不到 瀏覽:264
安卓qq空間免升級 瀏覽:490
linux如何刪除模塊驅動程序 瀏覽:193
at89c51c程序 瀏覽:329
怎麼創建word大綱文件 瀏覽:622
裊裊朗誦文件生成器 瀏覽:626
1054件文件是多少gb 瀏覽:371
高州禁養區內能養豬多少頭的文件 瀏覽:927
win8ico文件 瀏覽:949
仁和數控怎麼編程 瀏覽:381
項目文件夾圖片 瀏覽:87
怎麼在東芝電視安裝app 瀏覽:954
plc顯示數字怎麼編程 瀏覽:439
如何辨別假網站 瀏覽:711
寬頻用別人的賬號密碼 瀏覽:556
新app如何佔有市場 瀏覽:42

友情鏈接