chown、chmod改变文件权限
chgrp :改变文件所属群组
chown :改变文件拥有者
chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
常用权限数字:
vim编辑后 -rw-rw-r– : 664
修改为可执行文件 -rwxr-xr-x : 755
禁止其他用户查看 -rwxr----- : 740
打开Mac OSX原生的读写NTFS功能
默认情况下,把一个NTFS格式的磁盘插入到Mac里,是只能读不能写的。网上一直流传着这么一个简单的方法是用第三方工具,Paragon NTFS for MAC。但是要收费,第二就是破解版还不一定能运行。其实最早在OSX 10.5的时候,OSX其实原生就支持直接写入NTFS的盘的,后来由于微软的限制,把这个功能给屏蔽了,我们可以通过命令行手动打开这个选项。
Windows命令行设置永久环境变量
在cmd窗口中set设置的环境变量为临时变量,如:
1 | set PATH=%PATH%;D:\Program Files\ |
使用setx设置为永久环境变量,适用于bat中:
1 | setx PATH "%PATH%;D:\Program Files\" |
JDK并发包
JDK并发包简介
[TOC]
同步控制
1. synchronized扩展:重入锁 ReentrantLock
必须手动指定加解锁,提高逻辑控制灵活性
中断响应
lock.lockInterruptibly()可被Thread.interrupt()中断
可设置超时
lock.tryLock(5, TimeUnit.SECONDS) 超时返回false
公平锁
new ReentrantLock(true) 可生成公平锁
2. 信号量 Semaphore
控制同时执行的线程数
3. 读写锁 ReadWriteLock
1 | readWriteLock = new ReentrantReadWriteLock() |
两把锁会根据读写关系阻塞
4. 倒计时 CountDownLatch
用于等待有确切数量的进程完成
1 | public void CountDownLatchDemo(){ |
5. 循环栅栏 CyclicBarrier
CyclicBarrier cyclic = new CyclicBarrier(N, new BarrierRun(...));
当执行cyclic.await()未达到N次时,一直阻塞,直到第N次后执行BarrierRun线程,且cyclic解锁
cyclic可以继续await(),继续触发BarrierRun
线程池
1. 固定大小 newFixedThreadPool 空闲就执行,满了就队列等待
2. 单线程池 newSingleThreadPool 大小为1的 newFixedThreadPool
3. 大小不固定 newCachedThreadPool 满了会创建新的线程
4. 单线程任务计划 newSingleThreadScheduledExecutor 可以延时/周期执行,大小为1
5. 多线程任务计划 newScheduledExecutor
生成线程池方法ExecutorService es = Executors.newFixedThreadPool(5)
执行线程
1 | es.submit(new MyTask()); |
JDK并发容器
1. ConcurrentHashMap 高效且线程安全的HashMap
2. CopyOnWriteArrayList 安全的ArrayList。在读多写少场合性能远远好于Vector
3. ConcurrentLinkedQueue 高效且安全的LinkedList
4. BlockingQueue 阻塞队列接口,用于数据共享通道
5. ConcurrentSkipListMap 跳表实现,用于快速查找
Collections工具可以将任意容器包装为线程安全的容器,例如public static Map m = Collections.synchronizedMap(new HashMap());
高并发下隐蔽的错误案例
并发下的ArrayList
1 | public class ArrayListMultiThreadTest { |
运行这段代码,期望各添加1000 000个元素,但是遇到两种非预期结果:
- 程序抛出异常 Exception in thread “Thread-0” java.lang.ArrayIndexOutOfBoundsException: 823
- ArrayList大小为1000141
改进方式:ArrayList换为Vector
更改CentOS主机名
在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty)。静态
主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。瞬态
主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。而另一方面,灵活
主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如qqmm)。
在CentOS 7中,有个叫hostnamectl的命令行工具,它允许你查看或修改与主机名相关的配置。