2017-07-15 23:29
北京师范大学 Java 0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
2016-11-24 20:08
北京师范大学 Java 0 点赞 评论 收藏
分享
卖单王子:是否是同一个类在jvm中要看加载器是否相同,只有加载器相同,类相同才认为是同一个类。双亲委托是交给父类加载,加载不了子类再加载,目的是防止破坏核心库里的类。
0 点赞 评论 收藏
分享
舞法天女:预先分配多个对象的空间,比方说你要栈上就用数组这样咯。然后重载new为你希望的行为。跟内存池一个概念吧。
另外头像是本人吗?是的话加我qq我给你细细道来。~。~
0 点赞 评论 收藏
分享
2016-11-01 19:23
北京师范大学 Java 牛客9182916号:1,数组访问方式和对象访问一样 2,至于多大放入老年代,有参数可以配置,正常是如果年轻化放不下,直到放老年代 3,一般的判断对象可回收有2种算法,一个引用计数算法,java是可达性分析算法,解决环的问题
投递谷歌等公司10个岗位 >
0 点赞 评论 收藏
分享
2016-10-12 20:39
北京师范大学 Java 0 点赞 评论 收藏
分享
2016-09-20 10:13
北京师范大学 Java torreszhu:1、接收到任务 2、判断已存在线程数是否大于等于核心线程数,如果不是,则创建新线程执行任务;否则转3
3、判断任务队列是否有界,如果不是,将任务加入队列中;否则转4 4、判断任务队列是否已满,如果不是,将任务加入队列中;否则转5
5、判断已存在线程数是否等于最大线程数,如果不是,则创建新线程执行任务;否则转6 6、拒绝该任务 按照上面的画一个流程图就明白了
0 点赞 评论 收藏
分享
lixiaolx:The code would only execute
when someXThread was
executing, in which case telling someYThread to yield would be pointless. So since
the only thread worth calling yield on is the current thread, they make
the method static so you
won't waste time trying to call yield on
some
other thread
.
这是stackoverflow上的回答。是说,该代码只有在某个A线程执行时会被执行,这种情况下通知某个B线程yield是无意义的(因为B线程本来就没在执行)。因此只有当前线程执行yield才是有意义的。通过使该方法为static,你将不会浪费时间尝试yield 其他线程。
讲得很清楚,就是说,如果是和线程实例绑定的话,你可能会在当前线程中尝试调用otherThread.yeild()/sleep(), 而这使没有意义的
0 点赞 评论 收藏
分享
永不言弃+1:楼上有的人技术还是很浮躁啊,中断只是一个标志位,JDK源码有明确表示,sleep,io等中断之后会抛出异常,然后中断位会被立即修复,改变了标志位,需要自己去判断。真正的中断机制LockSupport的park来支持,这个在
java并发包下,所以多看看源码
0 点赞 评论 收藏
分享
投递京东等公司10个岗位 >
0 点赞 评论 收藏
分享
youHappyOK:我自己记得笔记,网易面试也考了这道题
Synchronized的底层实现依赖于JVM,
在
HotSpot JVM实现中,锁有个专门的名字:对象监视器。
当多个线程同时请求某个对象监视器时,对象监视器会设置几种状态用来区分请求的线程:
Contention List:一个虚拟的队列,所有请求锁的线程将被首先放置到该竞争队列
Entry List:Contention List中那些有资格成为***的线程被移到Entry List,ContentionList
会被线程并发访问,为了降低对ContentionList队尾的争用
Wait Set:那些调用wait方法被阻塞的线程被放置到Wait Set
OnDeck:任何时刻最多只能有一个线程正在竞争锁,该线程称为OnDeck
Owner:获得锁的线程称为Owner
!Owner:释放锁的线程
具体实现方式是:新请求锁的线程将首先被加入到ConetentionList中,当某个拥有锁的线程(Owner状态)调用unlock之后,如果发现EntryList为空则从ContentionList中移动线程到EntryList,OnDeck线程获得锁后即变为owner线程,无法获得锁则会依然留在EntryList中
0 点赞 评论 收藏
分享
NSSimacer:当提交一个新任务到线程池时
首先线程池判断基本线程池(corePoolSize)是否已满?没满,创建一个工作线程来执行任务。满了,则进入下个流程;
其次线程池判断工作队列(workQueue)是否已满?没满,则将新提交的任务存储在工作队列里。满了,则进入下个流程;
最后线程池判断整个线程池(maximumPoolSize)是否已满?没满,则创建一个新的工作线程来执行任务,满了,则交给拒绝策略来处理这个任务;
如果线程池中的线程数量大于 corePoolSize 时,如果某线程空闲时间超过
keepAliveTime,线程将被终止,直至线程池中的线程数目不大于
corePoolSize;如果允许为核心池中的线程设置存活时间,那么核心池中的线程空闲时间超过
keepAliveTime,线程也会被终止。
0 点赞 评论 收藏
分享
关注他的用户也关注了: