- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
package concurrent.activeobjects;
public interface Result {
Object getResultValue();
}
package concurrent.activeobjects;
public class RealResult implements Result {
private final Object result;
public RealResult(Object reslut) {
this.result = reslut;
}
@Override
public Object getResultValue() {
return result;
}
}
package concurrent.activeobjects;
public class FutureResult implements Result {
private Result result;
private boolean ready = false;
public synchronized void setResult(Result result) {
this.result = result;
this.ready = true;
this.notifyAll();
}
@Override
public synchronized Object getResultValue() {
while (!ready) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return this.result.getResultValue();
}
}
package concurrent.activeobjects;
/**
* @className: MethodRequest
* @description: 对应 ActiveObject 的每一个方法
* @date: 2022/5/3
* @author: cakin
*/
public abstract class MethodRequest {
protected final Servant servant;
protected final FutureResult futureResult;
public MethodRequest(Servant servant, FutureResult futureResult) {
this.servant = servant;
this.futureResult = futureResult;
}
public abstract void execute();
}
package concurrent.activeobjects;
public class MakeStringRequest extends MethodRequest {
private final int count;
private final char fillchar;
public MakeStringRequest(Servant servant, FutureResult futureResult, int count, char fillChar) {
super(servant, futureResult);
this.count = count;
this.fillchar = fillChar;
}
@Override
public void execute() {
Result result = servant.makeString(count, fillchar);
futureResult.setResult(result);
}
}
package concurrent.activeobjects;
public class DisplayStringRequest extends MethodRequest {
private final String text;
public DisplayStringRequest(Servant servant, final String text) {
super(servant, null);
this.text = text;
}
@Override
public void execute() {
this.servant.displayString(text);
}
}
package concurrent.activeobjects;
import java.util.LinkedList;
public class ActivationQueue {
private final static int MAX_METHOD_REQUEST_QUEUE_SIZE = 100;
private final LinkedList<MethodRequest> methodQueue;
public ActivationQueue() {
methodQueue = new LinkedList<>();
}
public synchronized void put(MethodRequest request) {
while (methodQueue.size() >= MAX_METHOD_REQUEST_QUEUE_SIZE) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.methodQueue.addLast(request);
this.notifyAll();
}
public synchronized MethodRequest take() {
while (methodQueue.isEmpty()) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
MethodRequest methodRequest = methodQueue.removeFirst();
this.notifyAll();
return methodRequest;
}
}
package concurrent.activeobjects;
public class SchedulerThread extends Thread {
private final ActivationQueue activationQueue;
public SchedulerThread(ActivationQueue activationQueue) {
this.activationQueue = activationQueue;
}
public void invoke(MethodRequest request) {
this.activationQueue.put(request);
}
@Override
public void run() {
while (true) {
activationQueue.take().execute();
}
}
}
package concurrent.activeobjects;
/**
* @className: ActiveObject
* @description: 接受异步消息的主动对象
* @date: 2022/5/3
* @author: cakin
*/
public interface ActiveObject {
Result makeString(int count, char fillChar);
void displayString(String text);
}
package concurrent.activeobjects;
import java.util.concurrent.TimeUnit;
class Servant implements ActiveObject {
@Override
public Result makeString(int count, char fillChar) {
char[] buf = new char[count];
for (int i = 0; i < count; i++) {
buf[i] = fillChar;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return new RealResult(new String(buf));
}
@Override
public void displayString(String text) {
System.out.println("Display is " + text);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package concurrent.activeobjects;
class ActiveObjectProxy implements ActiveObject {
private final SchedulerThread schedulerThread;
private final Servant servant;
public ActiveObjectProxy(SchedulerThread schedulerThread, Servant servant) {
this.schedulerThread = schedulerThread;
this.servant = servant;
}
@Override
public Result makeString(int count, char fillChar) {
FutureResult future = new FutureResult();
schedulerThread.invoke(new MakeStringRequest(servant, future, count, fillChar));
return future;
}
@Override
public void displayString(String text) {
schedulerThread.invoke(new DisplayStringRequest(servant, text));
}
}
package concurrent.activeobjects;
public final class ActiveObjectFactory {
public ActiveObjectFactory() {
}
public static ActiveObject createAcitveObject() {
Servant servant = new Servant();
ActivationQueue queue = new ActivationQueue();
SchedulerThread schedulerThread = new SchedulerThread(queue);
ActiveObjectProxy proxy = new ActiveObjectProxy(schedulerThread, servant);
schedulerThread.start();
return proxy;
}
}
package concurrent.activeobjects;
public class DisplayClientThread extends Thread {
private final ActiveObject activeObject;
public DisplayClientThread(String name, ActiveObject activeObject) {
super(name);
this.activeObject = activeObject;
}
@Override
public void run() {
try {
for (int i = 0; true; i++) {
String text = Thread.currentThread().getName() + "=>" + i;
activeObject.displayString(text);
Thread.sleep(200);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package concurrent.activeobjects;
public class MakeClientThread extends Thread {
private final ActiveObject activeObject;
private final char fillChar;
public MakeClientThread(ActiveObject activeObject, String name) {
super(name);
this.activeObject = activeObject;
this.fillChar = name.charAt(0);
}
@Override
public void run() {
try {
for (int i = 0; true; i++) {
Result result = activeObject.makeString(i + 1, fillChar);
Thread.sleep(20);
Object value = (String) result.getResultValue();
System.out.println(Thread.currentThread().getName() + ": value " + value);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package concurrent.activeobjects;
public class Test {
public static void main(String[] args) {
ActiveObject activeObject = ActiveObjectFactory.createAcitveObject();
new MakeClientThread(activeObject, "Alice").start();
new MakeClientThread(activeObject, "Bobby").start();
new DisplayClientThread("Chris", activeObject).start();
}
}
Alice: value A
Bobby: value B
Display is Chris=>0
Alice: value AA
Display is Chris=>1
Bobby: value BB
Display is Chris=>2
Display is Chris=>3
Display is Chris=>4
Display is Chris=>5
Alice: value AAA
Display is Chris=>6
Bobby: value BBB
Display is Chris=>7
Display is Chris=>8
Display is Chris=>9
Display is Chris=>10
Display is Chris=>11
Display is Chris=>12
Display is Chris=>13
Display is Chris=>14
Display is Chris=>15
我对 Android 很陌生,如果问题重复,请避免并发送链接。有三个 Activity A、B 和 C。 Activity A 获取一个用户名,我想在 Activity C 中显示该用户名,但我想先运
我正在尝试制作记事本应用程序,因此每次打开新笔记时,布局都会相同。另外, Activity 的数量(新注释)不应定义得尽可能多 最佳答案 如果 Activity 始终相同,您可能应该创建一个适配器,允
我有 3 个 Activity 。 主窗口 5 个按钮 在按钮的主窗口中按下此窗口打开(将其称为父窗口) 在父窗口按钮上按下此窗口打开调用它作为结束子窗口。 现在从子窗口我从父窗口获取值如下:
我遇到了一个 Activity backstack 问题。假设我的后台有 5 个 Activity :比如 Activity A、 Activity B、 Activity C、 Activity D
我正在寻找必须具有以下附加特征的 JMS 提供程序: 采用多代理,所有代理都必须处于事件状态(无单点故障) 仅在两台机器上进行扩展就足以满足我们的需求 能够保证订购(如果 1 个生产者 + 1 个消费
假设,我有一个由 TabHost 组成的选项卡 Activity 。 TabHost 包含 2 个选项卡,每两个选项卡都有一个 Activity 组。每个 Activity 组包含一项 Activit
我正在开发一个应用程序,我需要根据某些操作导航到特定 Activity 。这是一张图片 我的第一个 Activity 是 ReadingActivity。基于某些操作,用户将被带到 NewProjec
我创建了一个与服务器异步通信的应用程序。当应用程序发出服务器请求时,将创建一个带有“正在加载”通知的新对话框( Activity )。主要 Activity 实现了处理服务器响应的方法,我想在主要 A
我想在我的所有应用程序 Activity 中显示相同的选项菜单。我创建了一个实现菜单的通用 Activity ,并且我所有的进一步 Activity 都扩展了它。 问题:当我需要扩展其他特定 Acti
我有四个 Activity ,即 java 文件 - Activity1.java、activity2.java、activity3.java、activity4.java 和 xml 文件 - Ac
我有两个 Activity 。我想将数据从第二个 Activity 发送到上一个 Activity 。第一个 Activity 有自定义 ListView 和 bean 类。当我点击第二个 Activ
根 Activity 是堆栈中当前的第一个 Activity 还是 list 中指定为启动 Activity 的 Activity ? 支持应用程序 P 在启动时启动 Activity A。然后 A
你好 我想知道您在绘制 Activity 图选择“Activity ”时考虑了哪些关键点? 您如何从要建模的问题中选择 Activity ? 谢谢 最佳答案 Activity 图用于对正在开发的系统和
如何从主 Activity 启动 Activity 并在子 Activity 返回主 Activity 中退出操作后返回主 Activity ? 我已将子 Activity 作为启动器 Intent
我的工作流程如下: 登录 Activity -> ActivityB -> ActivityC -> ActivityD 我想将数据从LoginActivity传递到ActivityD,但不直接传递到
我之前曾尝试获得此问题的答案,但找不到可以解决我的问题的答案。我正在制作保存圆盘高尔夫球分数的应用程序。我的 MainActivity 有 4 个按钮。新比赛、恢复比赛、类(class)和球员。 At
我有一个 tts 非 UI 类和 Activity 类。现在在 Activity 类中,我有一个按钮,用户可以从中选择男声或女声,具体取决于我想要将字符串传递给 tts 类的选择,然后一次tts 类根
问题有点复杂,首先, Activity A 和 Activity B 的 list 中都有 android:noHistory = true 。我有一个自定义 serialized 类,假设 MyCl
在我的应用程序中,我有两个 Activity (AuthenticationActivity 和 MainActivity),每个 Activity 都有一个导航图和大量 fragment 。我创建了
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How can i use compose email activity in tabView? 我想在选项
我是一名优秀的程序员,十分优秀!