Sto scrivendo una libreria computazionale in scala. Funzionalità simile I raggruppa in oggetti scala singoli nativi contenenti un mucchio di procedure e una memoria allocata staticamente per dati O (1) temporali.creazione di oggetti locali thread su scala
Questo approccio è adatto per un utilizzo a thread singolo. Ma chiamare le funzioni della libreria da thread diversi simultaneamente può sovrascrivere i dati temporali e fornire risposte errate ai chiamanti.
Posso semplicemente copiare questa libreria e scrivere la versione thread-safe spostando tutta la memoria allocata staticamente all'interno dello spazio locale delle funzioni. Ma preferisco evitarlo definendo le variabili locali del thread.
E 'possibile in scala?
Si noti inoltre che c'è 'DynamicVariable' di scala che è fondamentalmente un wrapper attorno a 'InheritableThreadLocal'. Tuttavia, non fornisce alcuna opzione per locals di thread non ereditabili. –
@ Régis Jean-Gilles Forse non è strettamente correlato alla domanda di OP, ma: hai menzionato 'InheritableThreadLocal', sembra che non si combini bene con il framework di' Executors' a causa del pooling. Esiste un caso d'uso per tali variabili, oltre a ciò che viene tenuto in deprecato 'new Thread(). Start()'? – idonnie
'DynamicVariable' è utile per implementare il * dynamic scope pattern *. Vedi la mia altra risposta con l'esempio: http://stackoverflow.com/a/13252952/1632462. Tuttavia non deve mai essere usato in un contesto multi-thread, in cui semplicemente non funzionerà. –