ورود

View Full Version : استفاده از تايمرها و Thread ها با هم



pouria_bayat
چهارشنبه 24 فروردین 1390, 11:36 صبح
سلام دوستان كسي ميدونه چطوري ميشه از تايمرها همراه Thread‌ها استفاده كرد؟ هرچي سرچ كردم چيز خاصي پيدا نكردم فرض كنيد ميخواهيم چندتا ترد رو توي يك زمان خاص مثلا هر 5 دقيقه با هم اجرا كنيم تا 5 دقيقه بعد و همينطور پشت سر هم چطوري ميشه اينكارو كرد؟ گير كردم لطفا كمك كنيد.

pouria_bayat
چهارشنبه 24 فروردین 1390, 11:51 صبح
يكجا ديدم نوشته نميشه اگر نميشه اين دوكاره با هم كرد چطوري ميشه يك Timer يك كلاس رو صدا بزنه و توي مراحل زماني خاص اونو اجرا كنه؟

Abalfazl
جمعه 26 فروردین 1390, 11:09 صبح
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/ThreadGroup.html

javaphantom
سه شنبه 30 فروردین 1390, 19:18 عصر
public class ThreadService implements Runnable {

private long delayTime;
private Thread thread;
private ThreadClass[] threadClasses;

public ThreadService(long delayTime, ThreadClass[] threadClasses) {
this.threadClasses = threadClasses;
this.delayTime = delayTime;
Thread t = new Thread(this);
t.start();

}

public void run() {

try {
while (true) {
synchronized (this) {
for (int classIndex = 0; classIndex < threadClasses.length; classIndex++) {
threadClasses[classIndex] = new ThreadClass();
threadClasses[classIndex].start();
}
this.wait(this.delayTime);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}

}

public static void main(String[] s) {
ThreadClass[] threadClasses = new ThreadClass[5];
ThreadService threadService = new ThreadService(10000, threadClasses);
}
}


public class ThreadClass extends Thread {

@Override
public void run() {

try {
for (int i = 0; i < 5; i++) {
synchronized (this) {
System.out.println(this.getName() + " " + this.getState());
this.wait(1000);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}

pouria_bayat
پنج شنبه 01 اردیبهشت 1390, 16:15 عصر
سلام بابك جان ميشه كمي در مورد Scheduler بهم بگي و اينكه تردها رو مجبور كنيم كه ابتدا مثلا كلاس a اجرابشه و بعد ساير كلاسها.
ممنونم.

pouria_bayat
جمعه 02 اردیبهشت 1390, 23:20 عصر
ببين بابك جان من يك همچين كدي ميخواهم سرچ كردم اينو پيدا كردم:


new java.util.Timer().schedule(
new java.util.TimerTask() {

@Override
public void run() {

Startpro start = new Startpro();
Thread sp = new Thread(start);
sp.start();
}
},20000);



اما يك مشگل وجود داره اينكه بعد از 20 ثانيه من ميخواهم ك يكسري از تردهام مثلا در اين كد Thread sp اجرا بشه و هر 20 ثانيه اينكار اتفاق بيفته، دفعه اول اينكار ميشه يعني ترد مربوطه اجرا ميشه و كلاس startpro() شروع به كار ميكنه اما توي 20 ثانيه بعد كه دوباره بايد اجرا بشه ترد اجرا نميشه در كل فقط يكبار اجرا ميشه مشگلش چيه؟

البته جا داره كه بگم من اينكارو توي يك دكمه انجام دادم. كه وقتي روش كليك ميشه برنامه شروع به كار بكنه ووقتي دوباره روش كليك ميشه برنامه متوقف بشه.

javaphantom
شنبه 03 اردیبهشت 1390, 16:10 عصر
ببين بابك جان من يك همچين كدي ميخواهم سرچ كردم اينو پيدا كردم:


new java.util.Timer().schedule(
new java.util.TimerTask() {

@Override
public void run() {

Startpro start = new Startpro();
Thread sp = new Thread(start);
sp.start();
}
},20000);



اما يك مشگل وجود داره اينكه بعد از 20 ثانيه من ميخواهم ك يكسري از تردهام مثلا در اين كد Thread sp اجرا بشه و هر 20 ثانيه اينكار اتفاق بيفته، دفعه اول اينكار ميشه يعني ترد مربوطه اجرا ميشه و كلاس startpro() شروع به كار ميكنه اما توي 20 ثانيه بعد كه دوباره بايد اجرا بشه ترد اجرا نميشه در كل فقط يكبار اجرا ميشه مشگلش چيه؟

البته جا داره كه بگم من اينكارو توي يك دكمه انجام دادم. كه وقتي روش كليك ميشه برنامه شروع به كار بكنه ووقتي دوباره روش كليك ميشه برنامه متوقف بشه.




import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
* Created by IntelliJ IDEA.
* User: azarmi
* Date: 4/23/11
* Time: 10:30 AM
* To change this template use File | Settings | File Templates.
*/
public class MyFrame extends JFrame implements Runnable {

private JLabel myLabel;
private JPanel myPanel;
private JButton myButton;
private boolean timerFlag = false;
private Thread t ;

public MyFrame() {
this.setBounds(new Rectangle(400, 400));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.getContentPane().add(this.getMyPanel());
this.setVisible(true);
}


public JLabel getMyLabel() {
if (myLabel == null) {
this.myLabel = new JLabel("0");
}
return myLabel;
}

public JPanel getMyPanel() {
if (this.myPanel == null) {
this.myPanel = new JPanel();
this.myPanel.setLayout(new FlowLayout());
this.myPanel.add(this.getMyLabel());
this.myPanel.add(this.getMyButton());
}
return myPanel;
}

private void resetThread(ActionEvent e) {
this.t = new Thread(this);
t.start();
}

public JButton getMyButton() {
if (this.myButton == null) {
this.myButton = new JButton("Start");
this.myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (timerFlag == false && myButton.getText().equals("Start")) {
timerFlag = true;
myButton.setText("Stop");
resetThread(e);
} else {
timerFlag = false;
myButton.setText("Start");

}
}
});
}
return myButton;
}

public void run() {
int counter = 0;
try {
while (true) {
if (this.timerFlag) {
this.getMyLabel().setText(String.valueOf(++counter ));
} else {
break;
}
synchronized (this) {
wait(1000);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] s) {
new MyFrame();

}
}

pouria_bayat
شنبه 03 اردیبهشت 1390, 16:46 عصر
عالي بود ممنونم از زحماتت دقيقا چيزي كه ميخواستم.:قلب: