Läser Cell Värden i flera trådar samtidigt

Contents
[ ]

För att läsa cellvärden i mer än en tråd samtidigt, ställ inWorksheet.getCells().setMultiThreadReading() tillSannOm du inte gör det kan du få fel cellvärden. Observera att vissa funktioner som formatering av cellvärden inte stöds för flera trådar. Så med MultiThreadReading kan du bara komma åt cellens ursprungliga data. Om du försöker få cellens formaterade värde i en miljö med flera trådar, till exempel med Cell.getStringValue() för numeriska värden, kan du få oväntade resultat eller undantag.

Följande kod:

  1. Skapar en arbetsbok.
  2. Lägger till ett kalkylblad.
  3. Fyller kalkylbladet med strängvärden.
  4. Den skapar sedan två trådar som samtidigt läser värden från slumpmässiga celler. Om de avlästa värdena är korrekta händer ingenting. Om de avlästa värdena är felaktiga visas ett meddelande.

Om du kommenterar den här raden:

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

då visas följande meddelande:

if (s.equals("R" + row + "C" + col)!=true)

{

    System.out.println("This message box will show up when cells read values are incorrect.");

}

Annars körs programmet utan att visa något meddelande vilket betyder att alla värden som läses från celler är korrekta.

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