導航:首頁 > 編程語言 > 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相關的資料

熱點內容
maya做玻璃瓶教程 瀏覽:586
一條小米數據線大概多少錢 瀏覽:443
如何匹配兩個excel表格相同的數據 瀏覽:120
蘋果筆記本文件怎麼找回 瀏覽:426
資料庫怎麼用游標 瀏覽:722
不同頻率的數據如何共享 瀏覽:83
什麼時候說解讀文件 瀏覽:165
揚州前端程序員私活網站有哪些 瀏覽:657
怎麼改手機網路好一點 瀏覽:702
淺談微信卡券功能開發 瀏覽:511
線切割如何用電腦編程 瀏覽:227
vba如何獲取已經打開的excel文件 瀏覽:209
什麼是投標文件名 瀏覽:390
電腦網路斷開了怎麼辦 瀏覽:492
數控車床直角怎麼清角怎麼編程 瀏覽:414
如何從流量競爭到數據智能化 瀏覽:176
不想升級優酷 瀏覽:305
tplink初始密碼6位 瀏覽:720
如何找到絕對值最大的數據 瀏覽:269
vep文件怎麼播放 瀏覽:812

友情鏈接