volatile、ThreadLocal的使用场景和原理
并发编程中的三个概念 原子性 一个或多个操作。要么全部执行完成并且执行过程不会被打断,要么不执行。最常见的例子:i++/i--操作。不是原子性操作,如果不做好同步性就容易造成线程安全问题。 可见性 多个线程访问同一个变量,一个线程改变了这个变量的值,其他线程可以立即看到修改的值。可见性的问题,有两种方式保证。一是volatile关键字,二是通过synchronized和lock。详细在后面。 有序…
并发编程中的三个概念 原子性 一个或多个操作。要么全部执行完成并且执行过程不会被打断,要么不执行。最常见的例子:i++/i--操作。不是原子性操作,如果不做好同步性就容易造成线程安全问题。 可见性 多个线程访问同一个变量,一个线程改变了这个变量的值,其他线程可以立即看到修改的值。可见性的问题,有两种方式保证。一是volatile关键字,二是通过synchronized和lock。详细在后面。 有序…
爬山法和模拟退火算法通常用来求解TSP的最短路径问题。爬山法的一个最大的缺点就是,它只能获取一个局部最优的解,但是无法获取一个全局最优的解。而模拟退火算法,它以一定的概率接受较差的解,因此,可以在一定程度上避免局部最优的问题。而迪杰斯特拉算法虽然能够得到最短路径,但是由于需要大量的计算,比较消耗性能,因此,实际应用中并不多。关于爬山法和模拟退火算法的介绍,百度上不是很清楚,其他的一些资料上也介绍的…
问题 本地搭建了一个 ServerSocket 可以接收数据,但是服务器上只能连接上,一直接收不到数据。 解决 nginx 需要配置 配置长连接 配置如下。 events { use epoll; worker_connections 51200; multi_accept on; } stream{ upstream abc{ server 127.0.0.1:8543; keepalive 3…
重写接口 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) package com.example.androidtest; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import…
我觉得引用传递 真的很好理解,不知道为什么大家觉得这么难,你只要掌握这几点就可以了 在Java机制中他自己提供的那些数据类型(String ,Object等)要这样理解: 1)在Java中 引用 说的就是 地址指针,或者叫地址变量, 2)引用传递 一般发生在函数调用的时候,最明显的特征就是 函数参数 3)如果引用传递 实用过程中 ,函数没有返回值,这个叫真正的引用传递,没有改变对象…
模拟实现strncpy strncpy就是将src中的n个字符拷贝到dest中,要注意几个点: 如果 src长度小于len , 用‘\0’ 补齐len的长度 。注意用strlen判断src长度时,要明白strlen是向后找‘\0’来计算长度,所以,如果是用单个字符赋值,不要忘记在结尾加上‘\0’,如果要给src限定长度时也不要忘记算上‘\0’的长度 如果 src长度大于len , 只会拷贝len个…
/*********************************************************************** 给定一个罗马数字s,( I<=s<=MMMCMXCIX)(即1到3999),将罗马数字转换成整数。 如罗马数字I,II,III,IV,V分别代表数字1, 2, 3, 4, 5。 格式: 第一行输入一个罗马数字,接下来输出对应的整数。 提示: …
<pre name="code" class="objc">NSUserDefaults 1.可以保存一些简单的数据 2.可以定制应用的行为 NSUserDefaults *d = [NSUserDefaults standardUserDefaults]; //write [d setObject:@"iCrazy" forKey:@"name"]; [d setInteger:20…