Cell Değerlerini Birden Çok Konuda Aynı Anda Okumak

Contents
[ ]

Aynı anda birden fazla iş parçacığındaki hücre değerlerini okumak için,Worksheet.getCells().setMultiThreadReading() iledoğruBunu yapmazsanız, yanlış hücre değerleri alabilirsiniz. Hücre değerlerini biçimlendirme gibi bazı özelliklerin birden çok iş parçacığı için desteklenmediğini lütfen unutmayın. Yani MultiThreadReading, yalnızca hücrenin yalnızca orijinal verilerine erişmenizi sağlar. Çoklu iş parçacığı ortamında, sayısal değerler için Cell.getStringValue() gibi hücrenin biçimlendirilmiş değerini almaya çalışırsanız, beklenmeyen bir sonuç veya istisna alabilirsiniz.

Aşağıdaki kod:

  1. Bir çalışma kitabı oluşturur.
  2. Bir çalışma sayfası ekler.
  3. Çalışma sayfasını dize değerleriyle doldurur.
  4. Daha sonra rastgele hücrelerden değerleri aynı anda okuyan iki iş parçacığı oluşturur. Okunan değerler doğruysa hiçbir şey olmaz. Okunan değerler yanlışsa bir mesaj görüntülenir.

Bu satırı yorumlarsanız:

testWorkbook.getWorksheets().get(0).getCells().setMultiThreadReading(true);

ardından 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 hücrelerden okunan tüm değerlerin doğru olduğu anlamına gelir.

// 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();
}