قراءة قيم الخلية في خيوط متعددة بشكل متزامن
كيفية قراءة قيم الخلية في عدة خيوط بشكل متزامن مع Aspose.Cells for Java
لقراءة قيم الخلية في أكثر من خيط بشكل متزامن، قم بضبط Worksheet.getCells().setMultiThreadReading() إلى true. إذا لم تفعل ذلك، قد تحصل على قيم الخلية الخاطئة. يرجى ملاحظة، بعض الميزات مثل تنسيق قيم الخلية لا يتم دعمها لعمليات الخيوط المتعددة. لذلك MultiThreadReading يتمكنك من الوصول إلى البيانات الأصلية للخلية فقط. في بيئة الخيوط المتعددة إذا حاولت الحصول على قيمة المنسقة للخلية، مثل باستخدام Cell.getStringValue() للقيم الرقمية، قد تحصل على نتيجة غير متوقعة أو استثناء.
الكود التالي:
- ينشئ دفتر عمل.
- إضافة ورقة عمل.
- ملء ورقة العمل بقيم السلسلة.
- ثم ينشئ خيطين يقرأان قيمًا بشكل متزامن من الخلايا العشوائية. إذا كانت القيم المقروءة صحيحة، لا يحدث شيء. إذا كانت القيم المقروءة غير صحيحة، يتم عرض رسالة.
إذا قمت بتعليق هذا السطر:
testWorkbook.getWorksheets().get(0).getCells().setMultiThreadReading(true);
سيتم عرض الرسالة التالية:
if (s.equals("R" + row + "C" + col)!=true)
{
System.out.println("This message box will show up when cells read values are incorrect.");
}
وإلا، يعمل البرنامج بدون عرض أي رسالة مما يعني أن جميع القيم المقروءة من الخلايا صحيحة.
// 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(); | |
} |