Ben işçiler denilen bir dizi konu var. Durum adı verilen başka bir konu daha var.1 1 Konu yapmak için bir dizi konu için bekleyin Konu başlıkları
Her iki ileti paylaşılan bir LinkedBlockingQueue'ya erişir. İşçiler (iş parçacığı dizisi), iş ve durum raporlarını her 30 saniyede bir sıranın boyutunu almak için poll() yöntemini kullanır. Bu çalışan
Sorunum durum sınıfından basılmış aşağıdaki olsun geçerli:
önizlenirken ... ...
YÜKLEME
Ama önizleme yapmadan önce görünmelidir, ve sadece önce, UPLOADING. Yani, durum nesnesinin işçilerin ilk parti işini tamamlamasını beklemiyor muyum?
İNDİRME ....
önizlenirken ....
YÜKLEME ...
ancak bunun yerine şeyler dışında biraz gibidir:
Şunu istiyorum senkron.
// start up the Status Object class.
int downloadSize = filesToDownload.size();
Thread statusThread = new Thread(new Status(filesToDownload, currentYear, downloadSize, "DOWNLOADING..."));
statusThread.start();
/**
* download the files
*/
Thread[] workers = new Thread[NUMBER_OF_THREADS];
for (int x = 0; x < NUMBER_OF_THREADS; x++) {
workers[x] = new Thread(new S3ObjectDownloader(filesToDownload, currentYear));
workers[x].start();
}
for (int x = 0; x < NUMBER_OF_THREADS; x++) {
try {
workers[x].join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* create previews
*/
int previewSize = filesToPreview.size();
statusThread = new Thread(new Status(filesToPreview, currentYear, previewSize, "PREVIEWING..."));
statusThread.start();
workers = new Thread[NUMBER_OF_THREADS];
for (int x = 0; x < NUMBER_OF_THREADS; x++) {
workers[x] = new Thread(new Worker(filesToPreview, currentYear));
workers[x].start();
}
for (int x = 0; x < NUMBER_OF_THREADS; x++) {
try {
workers[x].join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* upload previews to S3.
*/
// we need the TransferManager for the uploads.
TransferManager txManager = new TransferManager(new ClasspathPropertiesFileCredentialsProvider());
statusThread = new Thread(new Status(filesToUpload, currentYear, filesToUpload.size(), "UPLOADING..."));
statusThread.start();
workers = new Thread[NUMBER_OF_THREADS];
for (int x = 0; x < NUMBER_OF_THREADS; x++) {
workers[x] = new Thread(new S3ObjectUploader(filesToUpload, currentYear, txManager));
workers[x].start();
}
for (int x = 0; x < NUMBER_OF_THREADS; x++) {
try {
workers[x].join();
} catch (InterruptedException e) {
// TODO Auto-generated catch
// block
e.printStackTrace();
}
}
// shutdown transfer manager
txManager.shutdownNow();
Aşağıda Java tür senaryoları desteklemek için CountDownlatches vardır Status.java
public class Status implements Runnable {
private String conferenceYear;
private Queue<String>queue;
private int queueSize;
private String jobeName;
public Status(Queue<String> queue, String conferenceYear, int queueSize, String jobName){
this.conferenceYear = conferenceYear;
this.queue = queue;
this.queueSize = queueSize;
this.jobeName = jobName;
}
@Override
public void run() {
while(!queue.isEmpty()){
try {
float completion = (queue.size() * 1.0f)/this.queueSize;
System.out.println(this.jobeName+" : "+this.conferenceYear+ " remaining..."+MessageFormat.format("{0,number,#.##%}",completion));
TimeUnit.SECONDS.sleep(30);;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
! Teşekkürler! –