这两个方法都可以将任务提交到线程池. execute()方法的返回类型为void,这是在Executor接口中定义的,并且commit()方法可以返回一个保存计算结果的Future对象,该对象在ExecutorService中定义. 在该接口中,它扩展了Executor接口. 其他线程池类(例如ThreadPoolExecutor和ScheduledThreadPoolExecutor)具有这些方法.
阻塞方法意味着程序将等待此方法的完成,并且什么也不做. ServerSocket的Accept()方法始终在等待客户端连接. 在这里阻塞意味着当前线程将被挂起,直到返回调用结果为止,并且直到获得结果后才返回. 此外,还有异步和非阻塞方法会在任务完成之前返回.
您可以给出肯定的答案. Swing并不是线程安全的,但是即使面试官没有问您为什么,您也应该解释这个答案的原因. 当我们说swing不是线程安全的时,经常提到它的组件. 这些组件不能在多个线程中修改. 所有GUI组件更新必须在AWT线程中完成. Swing提供同步和异步回调方法. 要更新.
Swing API为Java开发人员提供了这两种方法,用于从当前线程而不是事件分发线程更新GUI组件. InvokeAndWait()同步更新GUI组件,例如进度条. 更新进度后,必须相应地更改进度栏. 如果多个线程跟踪进度,则调用invokeAndWait()方法以请求事件分派线程相应地更新组件. invokeLater()方法异步调用更新组件.

此问题还提到摆动和螺纹安全性. 尽管该组件不是线程安全的,但是有些方法可以被多个线程安全地调用,例如repaint(),revalidate(). JTextComponent的setText()方法以及JTextArea的insert()和append()方法也是线程安全的.
此问题与多线程无关,但是不变性有助于简化已经很复杂的并发程序. 可以共享不可变的对象而无需同步,从而减少了并发访问对象的同步开销. 但是,Java没有@Immutable批注. 要创建一个不可变的类,您必须执行以下步骤: 通过构造函数初始化所有成员,不为变量提供setter方法,并将所有成员声明为private,因此不允许直接访问这些成员. getter方法,不要直接返回对象本身,而是克隆对象并返回对象的副本. 我的文章“如何使对象在Java中不可变”中有详细的教程,阅读后您可以放心.
通常java多线程死锁,读写锁是用于提高并发程序性能的锁分离技术的结果. Java中的ReadWriteLock是Java 5中的新接口. ReadWriteLock维护一对关联的锁,一个用于只读操作,一个用于写操作. 读锁可以由多个读线程同时保持,而无需写线程. 写锁是排他的. 您可以在JDK中使用ReentrantReadWriteLock来实现此规则. 它最多支持65535个写锁和65535个读锁.
繁忙循环意味着程序员使用循环来使线程等待. 与传统方法wait(),sleep()或yield()不同,它们都放弃了CPU控制,而繁忙的循环并没有放弃CPU,而是运行一个Empty循环. 这样做的目的是保留CPU缓存. 在多核系统中,等待的线程在唤醒时可能会在另一个核上运行,这将重建缓存. 您可以使用它来避免重建缓存并减少重建的等待时间.
这是一个有趣的问题. 首先,volatile和atomic变量看起来很像,但是它们的功能不同. 易变变量可以确保先例关系,即写操作将在后续的读操作之前进行,但不能保证原子性. 例如,如果使用volatile修改count变量,则count ++操作不是原子的. AtomicInteger类提供的原子方法可以使此操作成为原子操作. 例如,getAndIncrement()方法执行原子增量操作,并将一个加到当前值. 其他数据类型和引用变量也可以执行类似的操作.
这个问题使很多Java程序员感到困惑. 如果您能想到是否释放了锁的线索,那么仍然有希望的答案是正确的. 无论您的同步块是正常退出还是异常退出,内部线程都将释放锁,因此我更喜欢同步块而不是锁接口,因为它不需要我花费精力来释放锁. 可以通过释放finally块中的锁来实现此功能.
在Java面试中经常会问这个问题,但是面试官对回答这个问题的满意度仅为50%. 其中一半无法编写双重检查锁,一半无法告知其隐藏的危险以及Java 1.5如何修复它. 实际上,这是创建线程安全单例的一种旧方法. 首次创建单例实例时,它尝试使用单个锁来优化性能,但是在JDK1.4中失败了,因为它太复杂了. 我个人也不喜欢. 无论如何,即使您不喜欢它,您仍然需要知道它,因为它经常被问到.
这是上述问题的后续措施. 如果您不喜欢双重检查锁,并且访问者询问创建Singleton类的替代方法,则可以使用JVM的类加载和静态变量初始化功能来创建Singleton实例,或者使用Enum类型来创建Singletons. ,我喜欢这种方法.
我最喜欢这种问题. 我相信您在编写并发代码以提高性能时也会遵循一些最佳实践. 我认为大多数Java程序员应该遵循以下三个最佳实践:
此问题就像如何强制Java垃圾回收. 还没有方法. 尽管可以使用System.gc()进行垃圾回收,但不能保证成功. 无法强制在Java中启动线程. 它由线程调度程序控制,并且Java不发布相关的API.
fork join框架是JDK7中出现的一种有效工具,它使Java开发人员可以充分利用现代服务器上的多处理器. 它是专门为那些可以递归地分为许多子模块的应用程序而设计的,目的是使用所有可用的处理能力来提高程序的性能. fork join框架的一个巨大优势是它使用了工作窃取算法,并且可以完成更多任务的工作线程可以从其他线程窃取任务以执行.
Java程序中的等待和睡眠会导致某种程度的暂停,它们可以满足不同的需求. wait()方法用于线程间通信. 如果等待条件为真,并且其他线程被唤醒,它将释放锁定. sleep()方法仅释放CPU资源或在一段时间内停止当前线程的执行,而不会释放锁.
参考: 如果有任何影响,请告诉我,我会及时将其删除
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159185-2.html
才终感知
而且不需要露面
这个教授就一逗比