تلخص هذه المقالة بشكل أساسي المعرفة ذات الصلة ببيانات مشاركة مؤشرات الترابط ، والتي تتضمن بشكل أساسي جانبين: أحدهما هو كيفية مشاركة البيانات ضمن مؤشر ترابط معين لضمان عدم تقاطع بيانات كل مؤشر ترابط ؛ والآخر هو كيفية مشاركة البيانات بين مؤشرات الترابط المتعددة لضمان اتساق البيانات.
إذا قمت بتنفيذها بنفسك ، فأنت تحدد خريطة ، فإن مؤشر الترابط هو المفتاح والبيانات هي القيمة. كل عنصر في الجدول هو البيانات المحضرة لكل مؤشر ترابط ، بحيث تكون البيانات متسقة في مؤشر ترابط واحد.
مثال
package com.iot.thread ؛ import java.util.hashmap ؛ import java.util.map ؛ import java.util.random ؛/*** تم إنشاؤه بواسطة Brian في 2016/2/4. */الفئة العامة threadscopesharedata {// إعداد جدول التجزئة لإعداد البيانات لكل مؤشر ترابط خريطة ثابتة خاصة <froof ، integer> threaddata = new hashmap <> () ؛ عشوائي () threaddata.get (thread.currentThread ()) ؛ system.out.println ("a from"+thread.currentTherTer ()+"get data"+data) ؛}} static class b {public void get () {int data = threaddata.get (thread.currentTratheRead () ؛ "+بيانات) ؛}}}الرمز أعلاه تقارير من حين لآخر استثناءات:
استثناء في موضوع "Thread-0" java.lang.nullpointerxception
في com.iot.thread.threadscopesharedata $ a.get (threadscopesharedata.java:29)
في com.iot.thread.Threadscopesharedata $ 1.run (ThreadScopesharedata.java:21)
في java.lang.thread.run (thread.java:745)
لا أعرف السبب المحدد بعد
API:
java.lang: class threadlocal <T>
استخدم كائن Threadlocal بدلاً من الخريطة أعلاه
حدد كائنًا لتغليف متغيرات متعددة ثم تخزين الكائن بأكمله في ThreadLocal
عندما يكون متعدد المتغيرات ، من الأفضل وضع فئة Threadlocal داخل فئة البيانات. تتبنى فئة البيانات وضع Singleton ، بحيث يكون أكثر ملاءمة لإنشاء كائنات جديدة والحصول على كائنات ، وفي نفس الوقت يكون التغليف أكثر.
Package com.iot.thread ؛ import java.util.random ؛/*** تم إنشاؤه بواسطة براين في 2016/2/4. */class public class threadlocaltest {private static static threadlocal <integer> threadinger = new threadlocal <> () ؛ public static void main (string [] args) {for (int i = 0 ؛ i <2 ؛ i ++) {new thread (new Runnable () عشوائي () a (). get () ؛ new b (). myThreadscopedata.getThreadInstance () ؛ system.out.println ("A From"+MyThreadscopedata) ؛}} الفئة الثابتة B {public void get () {int data = threadinger.get () ؛ system.out.println ("b من"+threadthread () = myThreadscopedata.getThreadInstance () ؛ system.out.println ("B من"+mythreadscopedata) ؛}}}/*** فئة البيانات chappariables* وضع singleton المدمج المتغير*/class mythreadscopedata threadlocal <myThreadScopedata> data = new threadlocal <> () ؛ myThreadScopedata الثابتة العامة getThReadInstance () {mythreadscopedata مثيل = data.get (exate} ؛ if (exate == null) {مثيل = جديد mythreadscopedata () ؛ data.set (مثال) ؛ {return name ؛} public void setName (اسم السلسلة) {this.name = name ؛} public int getage () {return Age ؛ Super.ToString ()+"-{name ، Age}"+": {"+getName ()+"،"+getage ()+"}" ؛ return reval ؛}}عدة طرق
مثال على الطريقة الأخيرة:
تصميم 5 مؤشرات ترابط ، وزيادة ثلاثة مؤشرات ترابط بمقدار 1 في كل مرة لـ J ، وتنخفض الخيوط الأخرى بمقدار 1 في كل مرة لـ J.
Package com.iot.thread ؛/*** تم إنشاؤه بواسطة براين في 2016/2/4. */الطبقة العامة mutithreadsharedata {private static mutisharedata mutisharedata = new mutisharedata () ؛ public static void main (string [] args) {for (int i = 0 ؛ i <3 ؛ i ++) {new thread (new runnable () {Override public run () "+mutisharedata.getj ()+"+to: "+mutisharedata.increment ()+"} ") ؛}) "+mutisharedata.getj ()+" - إلى: Synchronized int inmentrement () {return -j ؛} synchronized int getj () {return j ؛} setj setj (int j) {this.j = j ؛}}ما سبق هو كل التفسير التفصيلي لرمز البيانات المشترك متعدد الخيوط Java ، وآمل أن يكون مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!