package net.jcip.examples;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.util.concurrent.*;
import javax.swing.*;
/**
* ListenerExamples
*
* @author Brian Goetz and Tim Peierls
*/
public class ListenerExamples {
private static ExecutorService exec = Executors.newCachedThreadPool();
private final JButton colorButton = new JButton("Change color");
private final Random random = new Random();
private void backgroundRandom() {
colorButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
colorButton.setBackground(new Color(random.nextInt()));
}
});
}
private final JButton computeButton = new JButton("Big computation");
private void longRunningTask() {
computeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
exec.execute(new Runnable() {
public void run() {
/* Do big computation */
}
});
}
});
}
private final JButton button = new JButton("Do");
private final JLabel label = new JLabel("idle");
private void longRunningTaskWithFeedback() {
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
button.setEnabled(false);
label.setText("busy");
exec.execute(new Runnable() {
public void run() {
try {
/* Do big computation */
} finally {
GuiExecutor.instance().execute(new Runnable() {
public void run() {
button.setEnabled(true);
label.setText("idle");
}
});
}
}
});
}
});
}
private final JButton startButton = new JButton("Start");
private final JButton cancelButton = new JButton("Cancel");
private Future<?> runningTask = null; // thread-confined
private void taskWithCancellation() {
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (runningTask != null) {
runningTask = exec.submit(new Runnable() {
public void run() {
while (moreWork()) {
if (Thread.currentThread().isInterrupted()) {
cleanUpPartialWork();
break;
}
doSomeWork();
}
}
private boolean moreWork() {
return false;
}
private void cleanUpPartialWork() {
}
private void doSomeWork() {
}
});
}
;
}
});
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (runningTask != null)
runningTask.cancel(true);
}
});
}
private void runInBackground(final Runnable task) {
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
class CancelListener implements ActionListener {
BackgroundTask<?> task;
public void actionPerformed(ActionEvent event) {
if (task != null)
task.cancel(true);
}
}
final CancelListener listener = new CancelListener();
listener.task = new BackgroundTask<Void>() {
public Void compute() {
while (moreWork() && !isCancelled())
doSomeWork();
return null;
}
private boolean moreWork() {
return false;
}
private void doSomeWork() {
}
public void onCompletion(boolean cancelled, String s, Throwable exception) {
cancelButton.removeActionListener(listener);
label.setText("done");
}
};
cancelButton.addActionListener(listener);
exec.execute(task);
}
});
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
除了提供读者全面指南编写并发Java应用程序的书籍“Java Concurrency in Practice”外,还可以下载相关源代码。这包括书中使用的所有源代码示例,可以使用Maven轻松地将其导入Eclipse或IntelliJ IDEA中。通过实践源代码示例和实验代码,读者可以更深入地了解书中所介绍的概念,并培养他们的并发编程技能。
资源推荐
资源详情
资源评论
收起资源包目录
java并发编程实战源码 附有本书所有源码,maven 导入 eclipse或idea (145个子文件)
ListenerExamples.java 5KB
ImprovedList.java 3KB
ProducerConsumer.java 3KB
PutTakeTest.java 3KB
BackgroundTask.java 3KB
DeadlockAvoidance.java 3KB
IndexingService.java 3KB
SocketUsingTask.java 2KB
WebCrawler.java 2KB
Animals.java 2KB
TestBoundedBuffer.java 2KB
CellularAutomata.java 2KB
TimeBudget.java 2KB
ConcurrentPuzzleSolver.java 2KB
CooperatingNoDeadlock.java 2KB
ReadWriteMap.java 2KB
TransformingSequential.java 2KB
DynamicOrderDeadlock.java 2KB
LogService.java 2KB
InduceLockOrder.java 2KB
MyAppThread.java 2KB
FutureRenderer.java 2KB
LinkedQueue.java 2KB
TimedPutTakeTest.java 2KB
CooperatingDeadlock.java 2KB
Renderer.java 2KB
TrackingExecutor.java 2KB
ConditionBoundedBuffer.java 2KB
CachedFactorizer.java 2KB
SemaphoreBoundedBuffer.java 2KB
LifecycleWebServer.java 2KB
CasNumberRange.java 2KB
TimingThreadPool.java 2KB
TestThreadPool.java 1KB
DemonstrateDeadlock.java 1KB
RenderWithTimeBudget.java 1KB
Factorizer.java 1KB
TimedRun2.java 1KB
UnsafeCachingFactorizer.java 1KB
MonitorVehicleTracker.java 1KB
Memoizer.java 1KB
PrimeGenerator.java 1KB
StripedMap.java 1KB
GrumpyBoundedBuffer.java 1KB
DelegatingVehicleTracker.java 1KB
ThreadDeadlock.java 1KB
SynchronizedFactorizer.java 1KB
SemaphoreOnLock.java 1KB
BoundedBuffer.java 1KB
LogWriter.java 1KB
ReaderThread.java 1KB
TestHarness.java 1KB
Preloader.java 1KB
SwingUtilities.java 1KB
GuiExecutor.java 1KB
Memoizer3.java 1KB
SequentialPuzzleSolver.java 1KB
VolatileCachedFactorizer.java 1KB
CheckForMail.java 1KB
ConcurrentStack.java 1KB
PublishingVehicleTracker.java 1KB
BaseBoundedBuffer.java 1KB
Memoizer1.java 1012B
TimedLocking.java 999B
SleepyBoundedBuffer.java 983B
BoundedExecutor.java 981B
UnsafeCountingFactorizer.java 973B
ServerStatusAfterSplit.java 964B
VisualComponent.java 959B
PuzzleSolver.java 952B
TimedRun.java 950B
NumberRange.java 948B
TaskExecutionWebServer.java 947B
CountingFactorizer.java 915B
OneShotLatch.java 902B
BoundedHashSet.java 899B
ListHelpers.java 881B
ConnectionDispenser.java 871B
SafeListener.java 851B
ServerStatusBeforeSplit.java 819B
ThreadGate.java 813B
StatelessFactorizer.java 812B
ThreadPerTaskWebServer.java 805B
ThreeStooges.java 805B
PossibleReordering.java 802B
SingleThreadRenderer.java 800B
SimulatedCAS.java 788B
BrokenPrimeProducer.java 784B
OneValueCache.java 770B
ReentrantLockPseudoRandom.java 752B
ValueLatch.java 750B
NoncancelableTask.java 747B
PrimeProducer.java 744B
AttributeStore.java 743B
BetterAttributeStore.java 738B
AtomicPseudoRandom.java 733B
HiddenIterator.java 676B
PuzzleNode.java 670B
Memoizer2.java 668B
TimedRun1.java 667B
共 145 条
- 1
- 2
资源评论
且行好事莫问前程
- 粉丝: 2w+
- 资源: 443
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 51单片机内部eeprom驱动代码.zip
- 智器阅读(最好用的安卓PDF阅读工具 修复Android6.0以上不能访问存储卡)
- 携程旅行parmas参数testab逆向
- 2022-1999年地区市场公平竞争程度
- 小米AX1800刷集客AP
- pdal2.7.1点云布料模拟滤波
- 2011-2022年全国各区县每日天气气温风向风力数据
- PDF合并器.exe\发票合并打印\PDF文件合并\PyPDF2包\PyQt5库\PdfReader模块\PdfWriter模块
- 尚硅谷JavaWeb项目改造:SpringBoot+MybatisPlus重构微头条
- c&c++课程设计KTV歌曲系统,学生档案管理系统,个人收支系统,职工管理系统等
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功