?????? 区别:
?????????????? 1、Comparable定义在内部。比如class Person implements Comparable就说明Person是一个可比较的对象
?????????????? 2、Comparator是定义在外部 class PersonComparator implements Comparator 说明PersonComparator是一个比较器
main方法是否可以重载?
?????? Java可重载main方法,可以有任意个数main()方法
为了运行java类,类的main()方法应该有例如“public static void main(String[] args)”的声明。如果你对此声明做任何修改,编译也是可以成功的。但是,运行不了Java程序。
进程的通信机制主要有:管道、有名管道、消息队列、信号量、共享空间、信号、套接字。
线程通信:内存共享、消息通信
java中基本类型的长度都是固定的,不随平台改变而改变
多线程中的性能杀手--伪共享
?????? 伪共享的非标准定义为:缓存系统中是以缓存行(cache line)为单位存储的,当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。
线程组:
?????? 线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。
?????? 允许线程访问有关自己的线程组的信息,但是不允许它访问有关其线程组的父线程组或其他任何线程组的信息。
?????? 线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织。
线程池和线程组的区别:
线程组:
线程组存在的意义,首要原因是安全。
java默认创建的线程都是属于系统线程组,而同一个线程组的线程是可以相互修改对方的数据的。
但如果在不同的线程组中,那么就不能“跨线程组”修改数据,可以从一定程度上保证数据安全.
线程池:
线程池存在的意义,首要作用是效率。
线程的创建和结束都需要耗费一定的系统时间(特别是创建),不停创建和删除线程会浪费大量的时间。所以,在创建出一条线程并使其在执行完任务后不结束,而是使其进入休眠状态,在需要用时再唤醒,那么 就可以节省一定的时间。
如果这样的线程比较多,那么就可以使用线程池来进行管理。保证效率。
线程组被弃用的原因:
1.线程组ThreadGroup对象中比较有用的方法是stop、resume、suspend等方法,由于这几个方法会导致线程的安全问题(主要是死锁问题),已经被官方废弃掉了,所以线程组本身的应用价值就大打折扣了。
2.线程组ThreadGroup不是线程安全的,这在使用过程中获取的信息并不全是及时有效的,这就降低了它的统计使用价值。
JVM的线程调度器实现了抢占式调度,每条线程执行的时间由它分配管理,它将按照线程优先级的建议对线程执行的时间进行分配,优先级越高,可能得到CPU的时间则越长。
Java并发包中Lock接口比起synchronized的优势
优势有:
1、可以使锁更公平;
2、可以使线程在等待锁的时候响应中断;
3、可以让线程尝试获取锁,并在无法获取锁的时候立即返回或者等待一段时间;
4、可以在不同的范围,以不同的顺序获取和释放锁。
偏,轻,重锁,分别解决三个问题,只有一个线程进入临界区,多个线程交替进入临界区,多线程同时进入临界区。
偏向锁,轻量级锁都是乐观锁,重量级锁是悲观锁。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-87102-9.html
这是中国的领海
下一步拭目以待
在干粉下还能生蛆太扯了吧