多线程(中)——常用类和包总结
常用类和包
1.ThreadLocal
ThreadLocal x = new ThreadLocal()
- 一般用在跨类,跨方法的传递一些值。在一些框架、底层的类中可能会用到,可以避免上层引用代码为了框架当数据的二传手
- 使用ThreadLocal声明的变量值在不同的线程执行相同的代码时保存的值不会互相影响
- ThreadLocal的 get()/ set(value)最终会将ThreadLocal作为变量传给ThreadLocalMap
- 相当于每个线程拥有了只有自己线程才能读取到的,属于自己线程的变量
eg: 用一个被ThreadLocal声明的变量就可以在不同的线程中使用,并且不用担心值被覆盖
2.Date
Date用来表示时间,Calendar用来操作时间
- Calendar calendar = Calendar.getInstance()
用来获取当前时间
calendar.add(Calendar.DAY_OF_YEAR, 100)
calendar.add(Calendar.MINUTE, 100)
使用 Calendar 可以对时间进行加减,括号内的第一个参数是时间单位,第二个参数是数量
Date date = calendar.getTime()
可以方便的得到 Date 对象
calendar.setTime(Date)
c2.setTimeInMillis(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(10))
设置时间,参数可以是Date类型的参数,也可以是根据当前时间去set一个毫秒数
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH时mm分ss秒”, Locale.SIMPLIFIED_CHINESE)
SimpleDateFormat 不是线程安全的,对线程共用一个 instance 会有问题
可以考虑用 ThreadLocal 给每个工作线程分配一个,也可以每次用到的时候创建实例
calendar.set(2020, Calendar.NOVEMBER, 20, 21, 36, 55)
SimpleDateFormat示例
Date and Time Pattern | Result |
---|---|
“yyyy.MM.dd G ‘at’ HH:mm:ss z” | 2001.07.04 AD at 12:08:56 PDT |
“EEE, MMM d, ''yy” | Wed, Jul 4, '01 |
“h:mm a” | 12:08 PM |
“hh ‘o’‘clock’ a, zzzz” | 12 o’clock PM, Pacific Daylight Time |
“K:mm a, z” | 0:08 PM, PDT |
“yyyyy.MMMMM.dd GGG hh:mm aaa” | 02001.July.04 AD 12:08 PM |
“EEE, d MMM yyyy HH:mm:ss Z” | Wed, 4 Jul 2001 12:08:56 -0700 |
“yyMMddHHmmssZ” | 010704120856-0700 |
“yyyy-MM-dd’T’HH:mm:ss.SSSZ” | 2001-07-04T12:08:56.235-0700 |
“yyyy-MM-dd’T’HH:mm:ss.SSSXXX” | 2001-07-04T12:08:56.235-07:00 |
“YYYY-'W’ww-u” | 2001-W27-3 |
3.定时方法
Timer timer = new Timer()
timer.scheduleAtFixedRate(要被执行的任务,0,TimeUnit.SECONDS.toMillis(2))
括号内参数:任务,延时,频率