ThreadLocal相关代码和面试题
作者:互联网
1代码1
class House { int saleCount = 0; public synchronized void saleHouse() { saleCount++; } // ThreadLocal<Integer> saleVolume = new ThreadLocal<Integer>() { // @Override // protected Integer initialValue() { // return 0; // } // }; ThreadLocal<Integer> saleVolume = ThreadLocal.withInitial(() -> 0); public void saleVolumeByThreadLocal() { saleVolume.set(1 + saleVolume.get()); } } public class ThreadLocalDemo { public static void main(String[] args) { House house = new House(); for (int i = 1; i <= 5; i++) { try { new Thread(() -> { int size = new Random().nextInt(5) + 1; // System.out.println(size); for (int j = 1; j <= size; j++) { house.saleHouse(); house.saleVolumeByThreadLocal(); } System.out.println(Thread.currentThread().getName() + "\t" + "卖出多少套" + house.saleVolume.get()); }, String.valueOf(i)).start(); }catch (Exception e) { }finally { house.saleVolume.remove(); } } try { TimeUnit.MILLISECONDS.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "\t" + "共卖出多少套:" + house.saleCount); } }
2.代码2
class MyData { ThreadLocal<Integer> threadLocalField = ThreadLocal.withInitial(() -> 0); public void add() { threadLocalField.set(1 + threadLocalField.get()); } } public class ThreadLocalDemo1 { public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(3); MyData myData = new MyData(); try { for (int i = 0; i < 10; i++) { threadPool.submit(() -> { try { Integer beforeInt = myData.threadLocalField.get(); myData.add(); Integer afterInt = myData.threadLocalField.get(); System.out.println(Thread.currentThread().getName() + "\t" + "beforeInt " + beforeInt + "\t" + " afterInt " + afterInt); } finally { myData.threadLocalField.remove(); } }); } } finally { threadPool.shutdown(); } try { TimeUnit.MILLISECONDS.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } } }
标签:面试题,int,代码,myData,ThreadLocal,void,threadLocalField,public 来源: https://www.cnblogs.com/liuyi13535496566/p/16389739.html