Надеюсь, вы поможете мне с этим.Мне нужно сделать программу, которая, используя несколько потоков, записывает в текстовый файл.Мне нужно показать, как процессор «обращает внимание» на тот или иной поток, поэтому в основном мне нужно, чтобы все потоки работали одновременно и, разумеется, записывали одновременно.
ВотМой код.
Способ 1. Использование «for» для создания и запуска потоков.
public class ThreadGenerator {
public static void main(String[] args) {
File textFile = new File("c:\\threadLog.txt");
try {
PrintWriter out = new PrintWriter(new FileWriter(textFile));
for (int index = 0; index < 5; index++) {
ThreadCustom thread = new ThreadCustom("ID" + index, out);
thread.start();
}
out.close();
} catch (IOException ex) {
Logger.getLogger(ThreadGenerator.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Способ 2. Создание и запуск каждого потока вручную
public class ThreadGenerator {
public static void main(String[] args) {
File textFile = new File("c:\\threadLog.txt");
try {
PrintWriter out = new PrintWriter(new FileWriter(textFile));
ThreadCustom thread1 = new ThreadCustom("ID1", out);
ThreadCustom thread2 = new ThreadCustom("ID2", out);
ThreadCustom thread3 = new ThreadCustom("ID3", out);
ThreadCustom thread4 = new ThreadCustom("ID4", out);
ThreadCustom thread5 = new ThreadCustom("ID5", out);
thread1.start();
thread2.start();
thread3.start();
thread4.start();
thread5.start();
out.close();
} catch (IOException ex) {
Logger.getLogger(ThreadGenerator.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Это мой класс ThreadCustom
public class ThreadCustom extends Thread {
private String threadId;
private PrintWriter out;
public ThreadCustom(String threadId, PrintWriter out){
this.threadId = threadId;
this.out = out;
}
@Override
public void run(){
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
Calendar cal = Calendar.getInstance();
this.out.println("Thread ID: "+this.threadId+" Enter Time: "+cal.getTime()+"\n");
for(int index = 0; index < 10000; index++){
this.out.println("Thread ID: "+this.threadId+" Current Time: "+cal.getTime()+"\n");
}
this.out.println("Thread ID: "+this.threadId+" Exit Time: "+cal.getTime()+"\n");
}
}
Итак, как вы можете видеть, я создаю PrinterWriter и задаю его в качестве параметра для создания объекта ThreadCustom, поэтому все потоки используют один и тот же объект PrinterWriter (все объектыв java передаются как ссылки, верно?)
Что я ожидаю получить?Что-то вроде этого
Thread ID: ID0 Enter Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID0 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID1 Enter Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID0 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID0 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID1 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID0 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID1 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID0 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID0 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID Exit Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID0 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID0 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID1 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID0 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID0 Current Time: Fri Jan 27 00:38:54 CLST 2012
Thread ID: ID1 Exit Time: Fri Jan 27 00:38:54 CLST 2012
или что-то в этом роде.
Надеюсь, вы мне поможете!
Заранее спасибо, сообщество !!.start () действительно создает .txt, но ничего не пишет на нем, но если я использую .run () вместо .start (), он записывает в .txt, но последовательно (ID0, ID1, ID3и т. д.)