gpt4 book ai didi

java - 解释 Java 单词“synchronized”在处理草图中的使用

转载 作者:行者123 更新时间:2023-12-02 05:05:51 25 4
gpt4 key购买 nike

Peter Lager (aka Quark) 优秀的G4P制作的节目中synchronized 这个词经常出现,如下面的代码片段,复制 from here 。基于此示例,我打算在处理草图中使用两个窗口,主窗口中显示纬度和经度以及其他数据,第二个窗口中显示天空中的卫星 View 。主程序将设置一系列卫星数据,这些数据将被读取并显示在辅助窗口中。稍后我将扩展该程序以记录旅途中的 GPS 数据,并制作天空图片和旅途的视频。 (我在 SuperBasic 中的 Sinclair QL 模拟上完成了一个类似的项目,但它有一些缺点,我可以通过处理来克服)

我已阅读this description Java 中的 synchronized ,但不明白为什么它适用于此。无论是否使用该词,下面的草图和其他测试似乎都会得到相同的结果。

请有人解释一下“同步”这个词是否真的需要,或者随着程序的扩展可能会变得必要。包含它有什么缺点吗?

import g4p_controls.*;

GWindow myWindow;

public void setup(){
size(480, 320, JAVA2D);

G4P.messagesEnabled(false);
G4P.setGlobalColorScheme(GCScheme.BLUE_SCHEME);
G4P.setCursor(ARROW);

if(frame != null){
frame.setTitle("Sketch Window");
}

myWindow = new GWindow(this, "Window title", 0, 0, 240, 120, false, JAVA2D);
myWindow.addDrawHandler(this, "myWindowDraw");
}

public void draw(){
background(100, 230, 100);
fill(0);
text("Main WIndow", 20 ,20);
}

// public void myWindowDraw(GWinApplet appc, GWinData data) {
synchronized public void myWindowDraw(GWinApplet appc, GWinData data) {
appc.background(100,100,200);
appc.fill(0,0,160);
appc.noStroke();

appc.ellipse(appc.width/2, appc.height/2, appc.width/1.2, appc.height/1.2);
appc.fill(255);
appc.text("Secondary window", 20, 20);
}

最佳答案

如果您的应用程序不是多线程的,则无需使用synchronized。然而,大多数现代处理器都是多核的,并且依靠应用程序中的多线程来实现最佳性能。如果您的应用程序不是、并且不太可能具有高性能,那么您可以忽略同步

如果在某个阶段,您增强代码以利用多线程,那么您将需要将其更改为“线程安全”。如今,许多程序员更喜欢从一开始就将线程安全构建到他们的代码中,以避免以后这样做。对于构建以多种不同方式使用的库的程序员来说尤其如此。

在 Java 8 中,您确实还有另一种选择来利用多线程。流库现在明确支持并行流,用于分割工作负载并在以后组合(减少/收集)它们。如果这可能满足您对速度的需求,那么您可以再次忽略同步并使用并行流来利用并行处理。例如,如果在某个阶段您需要处理大量 GPS 数据来创建视频,那么您可能有一个并行流来生成数据,分别处理每个部分,然后再次将它们组合成单个图片。使用流可以完成,而无需手动创建线程和线程安全。

关于java - 解释 Java 单词“synchronized”在处理草图中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com