Java runtime system permet à la thread d'utiliser un moniteur déjà obtenu (les moniteurs sont re-entrant). Comme ca on peut éviter autoblocage |
public class Reentrant { |
here
I am, in b() here I am, in a() |
Constructor Summary | |
---|---|
Timer()
Creates a new timer. |
|
Timer(boolean isDaemon)
Creates a new timer whose associated thread may be specified to run as a daemon. |
|
Timer(String name) Creates a new timer whose associated thread has the specified name. |
|
Timer(String name,
boolean isDaemon) Creates a new timer whose associated thread has the specified name, and may be specified to run as a daemon. |
Method Summary | |
---|---|
void |
cancel()
Terminates this timer, discarding any currently scheduled tasks. |
int |
purge()
Removes all cancelled tasks from this timer's task queue. |
void |
schedule(TimerTask task, Date time) Schedules the specified task for execution at the specified time. |
void |
schedule(TimerTask task, Date firstTime,
long period) Schedules the specified task for repeated fixed-delay execution, beginning at the specified time. |
void |
schedule(TimerTask task,
long delay) Schedules the specified task for execution after the specified delay. |
void |
schedule(TimerTask task,
long delay,
long period) Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay. |
void |
scheduleAtFixedRate(TimerTask task, Date firstTime,
long period) Schedules the specified task for repeated fixed-rate execution, beginning at the specified time. |
void |
scheduleAtFixedRate(TimerTask task,
long delay,
long period) Schedules the specified task for repeated fixed-rate execution, beginning after the specified delay. |
Constructor Summary | |
---|---|
protected |
TimerTask()
Creates a new timer task. |
Method Summary | |
---|---|
boolean |
cancel()
Cancels this timer task. |
abstract
void |
run()
The action to be performed by this timer task. |
long |
scheduledExecutionTime()
Returns the scheduled execution time of the most recent actual execution of this task. |
import
java.util.Timer; import java.util.TimerTask; public class TimerReminder { Timer timer; public TimerReminder(int seconds) { timer = new Timer(); timer.schedule(new RemindTask(), seconds*1000); } class RemindTask extends TimerTask { public void run() { System.out.println("Time's up!"); timer.cancel(); //Terminate the timer thread } } public static void main(String args[]) { System.out.format("About to schedule task.%n"); new TimerReminder(4); System.out.println("Task scheduled."); } } |
About
to schedule task. Task scheduled. Time's up! |
import
java.util.Timer; import java.util.TimerTask; /** * Schedule a task that executes once every second. */ public class Beep { Timer timer; public Beep() { timer = new Timer(); timer.schedule(new RemindTask(), 0, //initial delay 1*1000); //subsequent rate } class RemindTask extends TimerTask { int numWarningBeeps = 3; public void run() { if (numWarningBeeps > 0) { System.out.println("Beep!"); numWarningBeeps--; } else { System.out.println("Time's up!"); timer.cancel(); } } } public static void main(String args[]) { System.out.println("About to schedule task."); new Beep(); System.out.println("Task scheduled."); } } |
About
to schedule task. Task scheduled. Beep! Beep! Beep! Time's up! |
import
java.awt.*; import java.awt.event.*; import javax.swing.*; public class Test extends JPanel{ boolean bleu = true; public int x=30,y=30, rd=30; Label l = new Label("0"); int cnt=0; Color c; public void init(){ c=Color.blue; setForeground(c); addMouseListener(new MouseHandler()); add(l); } public void paintComponent(Graphics g){ super.paintComponent(g) ; g.fillRect(x, y, rd, rd); } boolean in (int mx,int my){ if((mx>x) && (mx<x+rd )) if((my>y)&&(my<y+rd)) return true; return false; } class MouseHandler extends MouseAdapter { public void mousePressed(MouseEvent e){ if(in(e.getX(),e.getY())) cnt++; else cnt--; l.setText(cnt+""); } } } //======================== import javax.swing.JFrame; public class TestApp { public static void main(String arg[]) { JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Test ex = new Test(); frame.add(ex); ex.init(); frame.setSize(250, 250); frame.setVisible(true); } } |
import
java.util.Timer; import java.util.TimerTask; import javax.swing.JFrame; public class Game { static Timer move; static Test ex; static int width=250, height=250; public static void main (String arg[]) { move =new Timer(); JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ex = new Test(); frame.add(ex); ex.init(); frame.setSize(width, height); frame.setVisible(true); move.schedule(new MvTask(), 1000, //initial delay 1*1000); //subsequent rate } static class MvTask extends TimerTask{ public void run() { ex.x= (int)(Math.random()*(ex.getWidth()-ex.rd)); ex.y= (int)(Math.random()*(ex.getHeight()-ex.rd)); ex.repaint(); } } } |