تنفيذ فئة ThreadLocal Simulation: المتغيرات المشتركة داخل نطاق مؤشر الترابط ، يمكن لكل مؤشر ترابط الوصول إليه فقط ، ولا يمكنه الوصول إلى مؤشرات الترابط الأخرى.
حزمة com.ljq.test.ther AB MODULE * Author Administrator * */public Class ThreadScopesharedata {// قم بإعداد بيانات int الخاصة بالبيانات المشتركة = 0 ؛ <froof ، integer> () ؛ // تعديل البيانات في مؤشر الترابط الحالي ، أعط معلومات التعديل = NEW Random () .out.println (thread.currenthread (). ؛}} الفئة الثابتة A {public void get () {int data = threaddata.get (thread.currentThread ()) ؛ public void get () {int data = threaddata.get (thread.currentThread ()) ؛
نتائج التشغيل:
دور وغرض threadlocal:
بالنسبة لمشاركة البيانات في مؤشرات الترابط ، أي بالنسبة لنفس رمز البرنامج ، يجب مشاركة الوحدات النمطية المتعددة عند التشغيل في نفس مؤشر الترابط ، ويتم مشاركة بيانات أخرى عند التشغيل في مؤشر ترابط آخر.
كل مؤشر ترابط يدعو إلى الكائن Global Threadlocal ، وهو ما يعادل إضافة سجل إلى الخريطة الداخلية. في نهاية مؤشر الترابط ، يمكنك استدعاء طريقة threadlocal.clear () ، بحيث يتم إصدار الذاكرة بشكل أسرع ، ولا بأس في تسميتها لأن مؤشر الترابط يمكنه أيضًا تحرير متغيرات الخيط ذات الصلة.
سيناريو تطبيق Threadlocal:
تحتوي معالجة الطلبات على سلسلة من العمليات: يجب أن تكتمل هذه العمليات في نفس المعاملة ، وعادة ما تكون في نفس الخيط. ، وإلا ، يتم تقديم جميع العمليات ، مما يتطلب أن تستخدم هذه العمليات نفس كائن اتصال قاعدة البيانات ، ورمز هذه العمليات في فئات الوحدة النمطية المختلفة.
تتضمن عمليات النقل المصرفي سلسلة من العمليات: يجب أن يتم إكمال رصيد النقل من الحساب وزيادة توازن الحساب. عمليات النقل الرمز هو طريقة كائنات حساب مختلفة.
على سبيل المثال ، ActionContext من STRUT2 ، عندما يتم استدعاء نفس الكود بواسطة مؤشرات ترابط مختلفة ، فإن البيانات التي تديرها هذا الرمز هي حالة وبيانات كل مؤشرات ترابط مؤشر ترابط ، بغض النظر عن عدد المرات التي تتصل بها طريقة getContext وطريقة getContext التي تكون فيها الوحدة النمطية هي نفسها.
الحالات التجريبية: تحديد متغير Threadlocal الذي يتم مشاركته ، ثم ابدأ مؤشرات ترابط متعددة لتخزين قيمة عشوائية إلى متغير Threadlocal ، ثم استدعاء الطرق المتعددة الأخرى لمختلف الفئات ، يمكنك أن ترى أن الفئات المتعددة تشترك في نفس البيانات في نفس الموضوع.
لتغليف متغير Threadlocal ، بحيث لا ينبغي للعالم الخارجي عدم تشغيل متغير Threadlocal مباشرة.
هذا التطبيق نادر نسبيا لتعبئة الأنواع الأساسية من البيانات.
تعتبر تغليف بيانات نوع الكائن أكثر شيوعًا ، أي دعًا فئة معينة تنشئ كائن مثيل مستقل لمؤشرات ترابط مختلفة.
حزمة com.ljq.test.Thread ؛ توفير كائن مثيل. <2 ؛ ؛ "الاسم" الطريقة الثابتة المقابلة A {public void get () {int data = x.get () ؛ ) ؛ .getage ()) ؛ "،" + mydata.getage ()) ؛}} // استخدم الطريقة الثابتة المقابلة B {public void get () {int data = x. get () ؛ .currenthread (). getMyData: " + myData.getName () +" ، " + mydata.getage ()) ؛ rivate mythreadscopedata () {} // توفير طريقة مثيل. لا تضيف الكلمات الرئيسية المتزامنة للإشارة إلى أن المواضيع تأخذ بياناتها الخاصة ، ولا تتداخل مع بعضها البعض. مجموعة البيانات في نطاق الخيط الحالي .Name = name ؛} public int getage () {return age ؛} public void setage (int age) {this.age = age ؛}}}