Aynı Anda Birden Fazla İş Parçacığından Hücre Değerlerini Okuma
Aspose.Cells for Java ile Aynı Anda Çoklu İş Parçacığından Hücre Değerlerini Okumanın Yolu
Aynı anda birden fazla iş parçacığında hücre değerlerini okumak için Worksheet.getCells().setMultiThreadReading()‘yi true olarak ayarlayın. Eğer yapmazsanız, yanlış hücre değerleri alabilirsiniz. Lütfen dikkat edin, formatlı hücre değerleri gibi bazı özellikler çoklu iplikler için desteklenmez. Bu nedenle, MultiThreadReading sadece hücrenin orijinal verilerine erişmenizi sağlar. Birden fazla iplikler ortamında hücrenin biçimlendirilmiş değerini almayı denerken, örneğin sayısal değerler için Cell.getStringValue() ile beklenmeyen bir sonuç veya istisna alabilirsiniz.
Aşağıdaki kod:
- Bir çalışma kitabı oluşturur.
- Bir çalışma sayfası ekler.
- Çalışma sayfasını dize değerleriyle doldurur.
- Sonra rastgele hücrelerden aynı anda değer okuyan iki iş parçacığı oluşturur. Okunan değerler doğru ise hiçbir şey olmaz. Okunan değerler yanlışsa bir mesaj görüntülenir.
Eğer bu satırı yorumlarsanız:
testWorkbook.getWorksheets().get(0).getCells().setMultiThreadReading(true);
o zaman aşağıdaki mesaj görüntülenir:
if (s.equals("R" + row + "C" + col)!=true)
{
System.out.println("This message box will show up when cells read values are incorrect.");
}
Aksi takdirde, program herhangi bir mesaj göstermeden çalışır, bu da demek olur ki tüm hücrelerden okunan değerler doğrudur.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
public abstract class ThreadProc implements Runnable { | |
boolean isRunning = true; | |
Workbook testWorkbook; | |
Random r = new Random(); | |
public ThreadProc(Workbook workbook) { | |
this.testWorkbook = workbook; | |
} | |
public int randomNext(int Low, int High) { | |
int R = r.nextInt(High - Low) + Low; | |
return R; | |
} | |
public void kill() { | |
this.isRunning = false; | |
} | |
public void run() { | |
while (this.isRunning) { | |
int row = randomNext(0, 10000); | |
int col = randomNext(0, 100); | |
//Commonly you can only access Cell.Value instead of Cell.StringValue. | |
//In this demo all cell values are string, so Cell.StringValue is same with Cell.Value here and can be used. | |
//For other values such as numeric, if you call Cell.StringValue here, you may get unexpected result or exception here. | |
//It is because that Cell.getStringValue() will format those values according to the number format but the formatting process | |
//does not support multi-threads. | |
String s = testWorkbook.getWorksheets().get(0).getCells().get(row, col).getStringValue(); | |
if (s.equals("R" + row + "C" + col) != true) { | |
System.out.println("This message box will show up when cells read values are incorrect."); | |
} | |
} | |
} | |
} | |
// Main.Java | |
static void TestMultiThreadingRead() throws Exception { | |
Workbook testWorkbook = new Workbook(); | |
testWorkbook.getWorksheets().clear(); | |
testWorkbook.getWorksheets().add("Sheet1"); | |
for (int row = 0; row < 10000; row++) | |
for (int col = 0; col < 100; col++) | |
testWorkbook.getWorksheets().get(0).getCells().get(row, col).setValue("R" + row + "C" + col); | |
//Commenting this line will show a pop-up message | |
testWorkbook.getWorksheets().get(0).getCells().setMultiThreadReading(true); | |
ThreadProc tp = new ThreadProc(testWorkbook); | |
Thread myThread1 = new Thread(tp); | |
myThread1.start(); | |
Thread myThread2 = new Thread(tp); | |
myThread2.start(); | |
Thread.currentThread().sleep(5*1000); | |
tp.kill(); | |
} |