我试图牢固地处理一个变量如何声明为
private volatile HashMap<Object, ArrayList<String>> data;
Run Code Online (Sandbox Code Playgroud)
会表现在多线程环境中.
我理解的是,这volatile意味着从主内存而不是从线程缓存中获取.这意味着如果正在更新变量,我将不会看到新值,直到更新完成并且我不会阻止,而是我看到的是最后更新的值.(这正是我想要的BTW.)
我的问题是,当ArrayList<String>线程B正在读取时,我在线程A中检索并添加或删除字符串时,volatile关键字究竟会受到什么影响?的HashMap唯一的或延伸到内容(K和V)的效果HashMap,以及?也就是说,当线程B获得ArrayList<String>当前正在线程A中修改的内容时,实际返回的内容是ArrayList<String>更新开始之前存在的最后一个值.
为了清楚起见,我们假设更新正在添加2个字符串.当线程B获得数组时,线程A中已添加一个字符串.线程B是否在添加第一个字符串之前获取数组?
我正在接管一个旧网站的维护,并遇到了这种令人困惑的语法,用于处理我以前从未见过的表单,我不确定它的作用:
foreach (array('address','comments','country','email','mail_content','name','title') as $vuln)
{
isset($_REQUEST[$vuln]) and $_REQUEST[$vuln] = htmlentities($_REQUEST[$vuln]);
isset($_GET[$vuln]) and $_GET[$vuln] = htmlentities($_GET[$vuln]);
isset($_POST[$vuln]) and $_POST[$vuln] = htmlentities($_POST[$vuln]);
isset($$vuln) and $$vuln = htmlentities($$vuln);
}
Run Code Online (Sandbox Code Playgroud)
它是"和",它让我 - 我把它读作"如果设置变量将其转换为htmlentities,但为什么那里有"和"?
最后,最后一行做了什么?
isset($$vuln) and $$vuln = htmlentities($$vuln);
Run Code Online (Sandbox Code Playgroud)