41) Java中invokeAndWait 和 invokeLater有什么区别?-达内培训负责整理
这两个方法是Swing API 提供给Java开发者用来从当前线程而不是事件派发线程更新GUI组件用的.InvokeAndWait()同步更新GUI组件,比如一个进度条,一旦进度更新了,进度条也要做出相应改变.如果进度被多个线程跟踪,那么就调用invokeAndWait()方法请求事件派发线程对组件进行相应更新.而invokeLater()方法是异步调用更新组件的.
42) Swing API中那些方法是线程安全的?
这个问题又提到了swing和线程安全,虽然组件不是线程安全的但是有一些方法是可以被多线程安全调用的,比如repaint(), revalidate(). JTextComponent的setText()方法和JTextArea的insert() 和 append() 方法也是线程安全的.
43) 如何在Java中创建Immutable对象?
这个问题看起来和多线程没什么关系, 但不变性有助于简化已经很复杂的并发程序.Immutable对象可以在没有同步的情况下共享,降低了对该对象进行并发访问时的同步化开销.可是Java没有@Immutable这个注解符,要创建不可变类,要实现下面几个步骤:通过构造方法初始化所有成员、对变量不要提供setter方法、将所有的成员声明为私有的,这样就不允许直接访问这些成员、在getter方法中,不要直接返回对象本身,而是克隆对象,并返回对象的拷贝.我的文章how to make an object Immutable in Java有详细的教程,看完你可以充满自信.
44) Java中的ReadWriteLock是什么?
一般而言,读写锁是用来提升并发程序性能的锁分离技术的成果.Java中的ReadWriteLock是Java 5 中新增的一个接口,一个ReadWriteLock维护一对关联的锁,一个用于只读操作一个用于写.在没有写线程的情况下一个读锁可能会同时被多个读线程持有.写锁是独占的,你可以使用JDK中的ReentrantReadWriteLock来实现这个规则,它最多支持65535个写锁和65535个读锁.
45) 多线程中的忙循环是什么?
忙循环就是程序员用循环让一个线程等待,不像传统方法wait(), sleep() 或 yield() 它们都放弃了CPU控制,而忙循环不会放弃CPU,它就是在运行一个空循环.这么做的目的是为了保留CPU缓存,在多核系统中,一个等待线程醒来的时候可能会在另一个内核运行,这样会重建缓存.为了避免重建缓存和减少等待重建的时间就可以使用它了.
46)volatile 变量和 atomic 变量有什么不同?
这是个有趣的问题.首先,volatile 变量和 atomic 变量看起来很像,但功能却不一样.Volatile变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不能保证原子性.例如用volatile修饰count变量那么 count++ 操作就不是原子性的.而AtomicInteger类提供的atomic方法可以让这种操作具有原子性如getAndIncrement()方法会原子性的进行增量操作把当前值加一,其它数据类型和引用变量也可以进行相似操作.
以上就是达内培训给大家做的内容详解,更多关于IT知识的学习,请继续关注达内培训