قراءة Cell القيم في خيوط متعددة في نفس الوقت
Contents
[
Hide
]
تعد الحاجة إلى قراءة قيم الخلايا في خيوط متعددة في وقت واحد مطلبًا شائعًا. تشرح هذه المقالة كيفية استخدام Aspose.Cells لهذا الغرض.
لقراءة قيم الخلايا في أكثر من مؤشر ترابط واحد في نفس الوقت ، قم بتعيينWorksheet.getCells (). setMultiThreadReading () إلىحقيقيإذا لم تقم بذلك ، فقد تحصل على قيم خلية خاطئة. يرجى ملاحظة أن بعض الميزات مثل تنسيق قيم الخلايا غير مدعومة لمؤشرات الترابط المتعددة. لذا فإن 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.");
}
خلاف ذلك ، يتم تشغيل البرنامج دون إظهار أي رسالة مما يعني أن جميع القيم المقروءة من الخلايا صحيحة.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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(); | |
} |