تشرح هذه المقالة تقنية ترابط Java بمزيد من التفصيل مع الأمثلة وأعتقد أنها ستكون مفيدة لفهم عميق لبرمجة Java. التفاصيل هي كما يلي:
لدى العديد من الأشخاص فهم معين للخيوط عند تعلم JAVA، وعندما بدأنا في الاتصال بتطوير Android، اكتشفنا حقًا مدى أهمية سلاسل الرسائل هذه. ستشاركك هذه المقالة تجربة استخدام سلاسل Java كمرجع لك.
بادئ ذي بدء، يجب أن يفهم الجميع أن الخيوط والعمليات ليست نفس الشيء. ما هي العملية؟ تشبه العملية تمامًا ما نحتاجه لتنفيذ ملف فئة، والخيط هو ما يستدعي بالفعل موارد وحدة المعالجة المركزية للتشغيل. يحتوي ملف الفئة بشكل عام على عملية واحدة فقط، ولكن يمكن أن يكون هناك العديد من سلاسل العمليات. يعد تنفيذ سلاسل الرسائل طريقة تنفيذ غير متزامنة.
1. كيفية بدء موضوع آخر في الوظيفة الرئيسية:
رمز العينة كما يلي:
public class Thread_one { public static void main(String [] args){ Run run = new Run();//run.run();// هذا استدعاء أسلوب، وهو مختلف تمامًا عن الموضوع Thread thread = new Thread (run); thread.start();// ابدأ تشغيل الخيط واستدعاء طريقة تشغيل الخيط for(int i=1; i<=20; i++){ System.out.println("قيمة الرئيسي Thread i: --------"+i); } }}class Run Implements Runnable{ @Override public void run() { for(int i=1; i<=20; i++){ System.out .println("قيمة الخيط الفرعي i:"+i);
2. طريقة النوم في المواضيع
رمز العينة كما يلي:
public class Thread_sleep { /* * إيقاف الموضوع مؤقتًا*/ public static void main(String [] args){ Runone run = new Runone(); new Thread(run thread.start(); (5000); thread.interrupt();// مقاطعة تنفيذ الخيط//thread.stop();// بالمقارنة مع مقاطعة الخيط، يعد الإيقاف صعبًا للغاية ولا يوصى باستخدام هذه الطريقة بشكل عام عندما يجب إغلاق مؤشر الترابط الفرعي }catch (InterruptedException e) { e.printStackTrace(); } }}class Runone Implements Runnable{ @Override public void run() { for(int i=1; i<10; i++. ){ حاول { Thread.sleep(1000 ); System.out.println("-----"+new Date()+"-----" } Catch (InterruptedException e) { return ;// عندما يتم اكتشاف مقاطعة الخيط الفرعي، أغلق الخيط الفرعي مباشرة} } }}
ملاحظة خاصة هنا هي أن thread.interrupt(); يمكن أن يقاطع تنفيذ سلسلة رسائل، وهي طريقة ألطف قليلاً من عملية التوقف، ولكنها ليست الطريقة الأفضل لإغلاق سلسلة رسائل:
public class Thread_stop { public static void main(String [] args){ Runthree run = new Runthree(); InterruptedException e) { e.printStackTrace(); } run.setStop(); }}class Runthree Implements Runnable{ boolean flag; { System.out.println("الخيط الفرعي----"+(i++)); Thread.sleep(1000); العلم = خطأ؛ } }
اسمحوا لي أن أقدم لكم باختصار عملية الدمج والتخلي في المواضيع:
1. كيفية دمج المواضيع ، يتم استدعاء طريقة join () هنا
رمز العينة كما يلي:
public class Thread_join { /* * دمج المواضيع*/ public static void main(String [] args){ Runtwo run = new Runtwo(); new Thread(run.start(); ();// دمج المواضيع، وهذا يعادل استدعاء الأسلوب} Catch (InterruptedException e) { e.printStackTrace() } for(int i=0; i<10; i++){ System.out.println("main الموضوع: "+i); } }}class Runtwo Implements Runnable{ @Override public void run() { for(int i=0; i<10; i++){ System.out.println("الخيط الفرعي: --- -"+i); } } }
2. كيفية التخلي عن الخيط يتم استدعاء طريقة العائد () للخيط هنا، كما هو موضح أدناه:
public class Thread_yield { /** التخلي عن وحدة المعالجة المركزية * @param args */ public static void main(String[] args) { Th th = new Th("aaa th.start();" ; i<=10; i++){ System.out.println("الخيط الرئيسي----"+i); ;} @Override public void run() { for(int i = 0; i<=10; i++){ if(i%3!=0){ System.out.println("child thread"+i }); else{ System.out.println("Sub-thread i="+i+" thread Switches");// لا يمكن استخدام هذه الطريقة إلا إذا ورثت من الموضوع} } }}
أخيرًا، أود أن أشارككم مسألة أولوية الموضوع ، الكود كالتالي:
public class Thread_priority { /* * الأولوية تحدد أولوية الخيط * الأولوية الافتراضية للخيط هي 5، الحد الأقصى للأولوية للخيط هو 10 والحد الأدنى هو 0 */ public static void main(String [] args){ T1 t1; = new T1(); new T2(); //t1.setPriority(Thread.NORM_PRIORITY+3); يمتد الموضوع { @Override public void run() { for(int i = 0; i<50; i++){ System.out.println("Thread T1-----"+i); Thread{ @Override public void run() { for(int i = 0; i<50; i++){ System.out.println("Thread T2"+i);
أعتقد أنك قد فهمت بشكل أساسي آلية الترابط في JAVA من خلال الكود أعلاه، وآمل أن يكون ما تصفه هذه المقالة مفيدًا لك في دراستك المتعمقة لبرمجة Java.