1),如何在两个线程之间共享数据。
通过在线程之间共享对象就可以了,然后通过wait/notify/notifyAll, await/signal/signalAll 进行唤起和等待。比方说阻塞队列 BlockingQueue 就是为线程之间共享数据设计的。
2),sleep方法和wait方法的区别。
sleep方法和wait方法都可以用来放弃CPU一定的时间。不同点在于如果线程持有某个对象的监视器,sleep方法不会放弃这个对象的监视器,wait方法会放弃这个对象的监视器。
3),生产者消费者模型的作用是什么。
(1),通过平衡生产者的生成能力和消费者的消费能力来提升整个系统的运行效率,这是生产者消费者模式最重要的作用。
(2),解耦,这是生产者消费者模型附带的作用,解耦意味着生产者和消费者之间的联系少,联系越少越可以独自发展而不需要收到相互的制约。
4), ThreadLocal有什么用 。
ThreadLocal就是一种以空间换时间的做法,在每个Thread里面维护了一个以地址法实现的 ThreadLocal.ThreadLocalMap ,把数据进行隔离,数据不共享,自然就没有线程安全方面的问题了。
5), 为什么wait()方法和notify()/notifyAll()方法要在同步块中被调用 。
这是JDK强制的,wait()方法和notify()/notifyAll()方法在调用前必须先获得对象的锁。
6), wait()方法和notify()/notifyAll()方法在放弃对象监视器时有什么区别 。
wait()方法和notify()/notifyAll()方法在放弃对象监控器的区别在于:wait()方法立即释放对象监视器,notify()/notifyAll()方法则会等待线程剩余代码执行完毕才会放弃对象监视器。
7), 为什么要使用线程池 。
避免频繁地创建和销毁线程。达到线程对象的重用。另外,使用线程池还可以根据项目灵活的控制并发的数目。
8), 怎么检测一个线程是否持有对象监视器 。
Thread类提供了一个holdsLock(Object obj)方法,当且仅当对象obj的监视器被某条线程持有的时候才会返回true,注意这个一个static方法。
9), synchronized和ReentrantLock的区别 。
synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是二者的本质区别,既然ReentrantLock是类。它提供了比synchroinized更多更灵活的特性。
(1)ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁
(2)ReentrantLock可以获取各种锁的信息
(3)ReentrantLock可以灵活地实现多路通知
10), ConcurrentHashMap的并发度是什么 ?
ConcurrentHashMap的并发度就是segment的大小,默认为16,这意味着最多同时可以有16条线程操作ConcurrentHashMap ,这也是ConcurrentHashMap对Hashtable的最大优势,
11), ReadWriteLock是什么 ?
ReentrantLock某些时候有局限。加锁,降低了程序的性能。读写锁ReadWriteLock。是一个读写锁接口,读写分离,读锁共享,写锁独占。
12), FutureTask是什么 ?
FutureTask表示一个异步运算的任务。FutureTask里面可以传入一个Callable的具体实现类,可以对这个异步运算的任务的结果进行等待获取、判断是否已经完成、取消任务等操作。当然,由于FutureTask也是Runnable接口的实现类,所以FutureTask也可以放入线程池中。
13), Linux环境下如何查找哪个线程使用CPU最长
(1),获取项目的pid, ps -ef|grep java
(2),top -H -p pid
分布式基础理论-----------------------------------------------------------------------------
1,CAP
分布式领域CAP理论。
1),Consistency,一致性:数据一致性,所有数据变动都是同步的。
2),Availability(可用性),好的响应性能。
3),Partition tolerance:分区容忍性。
在分布式系统中,这三个要素最多只能实现两点,不可能三者兼顾;对于分布式数据系统,分区容忍性是基本要求;对于大多数Web应用,牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。
2,Base
1),Basically Available;基本可用,支持分区失败。
2),Soft state 软状态:状态可以有一段时间不同步,异步。
3),Eventually consistent: 最终一致性,最终数据是一致的就可以了,而不是时时一致。
3,NoSQL运动两个核心理论。
1),Google的BigTable
BigTable提出了一种数据模型,将各列数据进行排序存储。数据值按范围分布在多台机器,数据更新操作有严格的一致性保证。
2),Dynamo使用的是另外一种分布式模型。Dynamo的模型更简单,它将数据按key进行hash存储。其数据分片模型有比较强的容灾性,因此它实现的是相对松散的弱一致性:最终一致性。