Реализация имитационного потока класса: общие переменные В диапазоне потоков каждый поток может получить доступ только к нему и не может получить доступ к другим потокам.
Пакет com.ljq.test.thread; AB MODULE * @Author Administer * * */Public Class Threadscopesharedata {// Подготовка общих данных Private Static Data = 0; <Thread, Integer> (); // Модифицируйте данные в текущем потоке, дайте информацию о модификации data = new Random () .out.println (Think.currenthread (). getName () + " ;}} Статический класс a {public void get () {int data = threaddata.get (thread.currentThread ()); public void get () {int data = threaddata.get (thread.currentthread ());
Результаты запустить:
Роль и цель нитолокального:
Для обмена данными в потоках, то есть для того же кода программы необходимо обмениваться несколькими модулями при запуске в одном и том же потоке, а другие данные используются при запуске в другом потоке.
Каждый поток вызывает заданный метод глобального потока, который эквивалентно добавлению записи к внутренней карте. В конце потока вы можете вызвать метод Threadlocal.clear (), чтобы память была выпущена быстрее, и это нормально, потому что поток также может автоматически высвобождать соответствующие потоки.
Сценарий приложения Threadlocal:
Обработка заказов содержит серию операций: уменьшить инвентарь, добавить учетную запись и изменить общую учетную запись. В противном случае представлены все операции, которые требуют, чтобы эти операции использовали один и тот же объект подключения базы данных, а код этих операций находился в разных классах модулей.
Банк перевода включает в себя серию операций: уменьшить баланс перевода с учета и увеличить баланс перевода на счет. Операции передачи Код - это метод двух разных объектов учетной записи.
Например, ActionContext of Strut2, когда один и тот же код вызывается и запускается различными потоками, данные, работающие этим кодом, представляют собой состояние и данные каждого потока Поток, независимо от того, сколько раз вызывал метод GetContext и метод GetContext, в котором модуль, в котором модуль одинаково.
Экспериментальные случаи: Определите трендовую переменную, которая является общей глобальной, а затем запустите несколько потоков для хранения случайного значения для потоковой переменной, а затем вызовите другие множественные методы различных других категорий Вы можете видеть, что несколько классов имеют одни и те же данные в одном и том же потоке.
Чтобы инкапсулировать нитолокальную переменную, так что внешний мир не должен напрямую эксплуатировать нитокальную переменную.
Это приложение относительно редко для упаковки основных типов данных.
Упаковка данных типа объекта встречается чаще, то есть пусть определенный класс создает независимый объект экземпляра для разных потоков.
Пакет com.ljq.test.thread; Предоставьте объект экземпляра. <2; ; «Имя» + Data); Соответствующий метод статический класс A {public void get () {int data = x.get (); ); . Getege ()); "," + mydata.getage ());}} // Использование соответствующего метода Статический класс B {public void get () {int data = x .get (); .Currenthread (). GetMyData: " + myData.getName () +", " + myData.getage ()); RESIVE MYTHREADSCOPEDATA () {} // Предоставьте метод экземпляра. Не добавляйте синхронизированные ключевые слова, чтобы указывать, что нити принимают свои собственные данные, и не мешают друг другу. Набор данных в текущем диапазоне потоков Статическая потока. .Name = name;} public int getage () {return Age;} public void setage (int age) {this.age = age;}}}