小编GMs*_*soF的帖子

无限的“while 循环”会消耗过多的资源吗

我想在特定时间触发 Java 代码,比如说每天凌晨 1 点。

我写了一个线程如下:

while (true) {
    if (currentTime = 1AM) {
        doSomething;
    }       
}
Run Code Online (Sandbox Code Playgroud)

我有点担心,while loop继续运行,会不会减慢机器速度,或者吃掉处理资源?

我的第一个问题是,我在想如果我每秒只循环 1 次,会更好吗?

while (true) {
    if (currentTime = 1AM) {
        doSomething;
    }       

    Thread.sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)

我的第二个问题是,有时我看到while loop如下写,大部分时间是获取 Java 锁,如果我们在while loop下面这样写,谁能解释一下有多昂贵(对不起,如果这是非常基本的问题)?

while (isLock) {
    // do nothing
}

doThisIfNoLock();
Run Code Online (Sandbox Code Playgroud)

我扩展上面的想法,如果我创建一个空线程,并且while loop内部无限空,那么线程实际消耗了多少资源(处理能力)?因为循环里面没有内容,按照我的想象,循环会跑的非常快,最终会占用很多个CPU周期?真的吗?

java loops infinite-loop while-loop

5
推荐指数
1
解决办法
3347
查看次数

Keycloak 客户端设置,SAML 私钥暴露

我知道在 SAML 协议中,IDP 和 SP 他们持有自己的密钥对,并且不会向对方公开他们的私钥。

我假设下面的领域密钥是 IDP 密钥对,这是有道理的,因为私钥没有公开。 在此处输入图片说明

但是,当我在客户端设置中打开“需要客户端签名”时,会生成 SAML 密钥并公开私钥?这意味着 IDP 知道将在 SP 应用程序中使用的私钥。 在此处输入图片说明

这没有意义,一定是我搞错了什么。有人可以帮忙澄清一下吗?

saml saml-2.0 keycloak redhat-sso

5
推荐指数
1
解决办法
1333
查看次数

项目构造函数中的Java Enum私有方法

public enum Parent {
    item1(1){

        public void testing() {
            add();
            multiply();
            minus(); // error here!!!
        } 

    }, item2(2);

    private int i ;
    Parent(int i){
        this.i = i;
    }

    public void setI(int i ){
        this.i = i;
    }
    public int getI(){
        return i;
    }

    public void multiply(){

    }
    protected void add(){

    }

    private void minus(){

    }
}
Run Code Online (Sandbox Code Playgroud)

正如你们所看到的那样,它们属于同一类,为什么minus()不能在内部使用?通常内部类可以private method/field在外部类中访问吗?

java enums inner-classes

4
推荐指数
1
解决办法
1633
查看次数

在SpannableStringBuilder和CharSequence之间进行转换

TextView tv = (TextView) findViewById(R.id.abc);
String rawString = "abcdefg";
SpannableStringBuilder ssb = new SpannableStringBuilder(rawString);
ssb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, rawString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(ssb);
CharSequence cs = tv.getText();
System.out.println(cs.getClass());
Run Code Online (Sandbox Code Playgroud)

输出是"class android.text.SpannedString"

为什么?我希望它是"SpannableStringBuilder",我的cast(SpannableStringBuilder ssb_2 = (SpannableStringBuilder)cs;)会给出上面例子的错误.

如果我设置文本视图的缓冲区类型,输出将更改为"SpannableString" android:bufferType="spannable"

谁知道为什么?

java android casting

4
推荐指数
1
解决办法
4186
查看次数

关于真机中的Android Logcat

我有一些与 Android Logcat 相关的问题,我指的是真实设备而不是模拟器中的这些问题:

  1. 我有一个程序有很多Log.d(或其他类似的日志功能),我做了一些谷歌搜索,发现这些日志将输出到一个循环的64K缓冲区。我的问题是,那些 64K 缓冲区位于哪里?它位于 RAM 还是文件系统中?我的应用程序退出后它会被删除吗?

  2. 我谷歌发现,日志将输出到一个名为/dev/event(不确定)的文件,但我在里面看不到任何与应用程序相关的日志记录,为什么?只能看到与系统相关的日志条目。

  3. 每个应用程序都会将其日志输出到不同的日志文件吗?或者它们都转储到同一个日志文件中?这种情况下,我们该如何分离日志呢?

  4. 如果日志缓冲区是64K,我们如何增加它?如果我们想将日志重定向到SD卡上的文件,我们如何限制文件大小(当然也使其成为循环)?

android logcat

4
推荐指数
1
解决办法
2283
查看次数

Android runOnUiThread执行顺序

runOnUiThread(new Runnable(){

    @Override
    public void run() {

         System.out.println("print out from runOnUIThread.");
    }

});

System.out.println("print out in main thread.");
Run Code Online (Sandbox Code Playgroud)


**Output:**
print out from runOnUIThread.
print out in main thread.
Run Code Online (Sandbox Code Playgroud)



基本上runOnUiThread将在后台线程中使用,我这样做只是为了测试。

上面的代码在Activity onCreate方法中执行。

从输出来看,结果不是我所期望的。我在想,既然将块runOnUiThread发布runnable到主线程,并且当前执行上下文已经在主线程中,所以runOnUiThread应该安排在“在主线程中打印”之后,但为什么结果不这样显示?我解释错了吗?谁能好心解释一下吗?


编辑:

哦,我应该先阅读 API。无论如何,这让我感到困惑的原因是,在 iOS 中,类似的机制表现不同:

dispatch_async(dispatch_get_main_queue(), ^{
           NSLog(@"Main thread from Dispatch.");
});

NSLog(@"Main thread.");
Run Code Online (Sandbox Code Playgroud)

上面的输出是相反的。

java multithreading android

3
推荐指数
1
解决办法
2104
查看次数

Java如何将单引号和双引号编码为HTML实体?

我怎么能编码""''

我很惊讶单引号和双引号没有在HTML实体4.0中定义,因此StringEscapeUtils无法将这2个字符转义为相应的实体.

还有其他与字符串相关的工具能够做到这一点吗?

HTML实体4.0中没有定义单引号和双引号的原因吗?

除了单引号和双引号之外,是否有任何框架能够将所有unicode字符编码为相应的实体?由于所有的unicode都可以手动转换为十进制实体并以HTML格式显示,所以有什么工具可以自动转换它?

html java

3
推荐指数
1
解决办法
9819
查看次数

UserTransaction中的Java多个数据库连接

static void clean() throws Exception {
  final UserTransaction tx = InitialContext.doLookup("UserTransaction");
  tx.begin();

  try {
    final DataSource ds = InitialContext.doLookup(Databases.ADMIN);
    Connection connection1 = ds.getConnection();
    Connection connection2 = ds.getConnection();
    PreparedStatement st1 = connection1.prepareStatement("XXX delete records XXX"); // delete data

    PreparedStatement st2 = connection2.prepareStatement("XXX insert records XXX"); // insert new data that is same primary as deleted data above

    st1.executeUpdate();
    st1.close();
    connection1.close();
    st2.executeUpdate();
    st2.close();
    connection2.close();
    tx.commit();
  } finally {
    if (tx.getStatus() == Status.STATUS_ACTIVE) {
      tx.rollback();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我有一个web应用程序,则DAODataSource为对象创建执行数据库操作的单个连接. …

database database-connection transactions commit java-ee

3
推荐指数
1
解决办法
2563
查看次数

Android测量视图可见区域

我一直在从这里搜索很多类似的答案,但没有一个可以准确地工作。我想计算自定义视图的可见区域,该视图可以被屏幕边缘遮挡,也可以被滚动视图的边缘遮挡,请看下图:

在此输入图像描述

如上所述,黑色是我的屏幕,红色是我的自定义视图,向上滚动一点,我想测量 B 的面积。

在此输入图像描述

如上所述,黑色是我的屏幕,红色是我的自定义视图,蓝色是滚动视图。自定义视图是滚动视图的子视图,它向上滚动一点。我想测量B的面积。

1 )我已经尝试过View.getWindowVisibleDisplayFrame,,,,,但没有一个能准确工作。乍一看它们看起来不错,但是当我滚动视图时,视图从屏幕上消失,不知何故,它向我显示了视图的完整高度和宽度,该视图甚至没有显示在屏幕内。View.getLocalVisibleRectView.getGlobalVisibleRect

2)我尝试View.getLocationOnScreen()手动getLocationInWindow()计算偏移量,获取XY坐标并加上/减去视图(和屏幕)的高度和宽度,但发现这也不容易,因为屏幕顶部总是有额外的菜单栏等,并且会弄乱结果。

3)虽然这在我的情况下不太可能,但我想知道,如果我的视图顶部有一个绝对布局并部分遮挡它,我仍然可以找到该区域吗?(两个布局都在同一个活动中)

我的问题是,有没有简单又准确的方法来计算我想要的面积?

android android-layout

3
推荐指数
1
解决办法
3062
查看次数

Jenkins 管道“cd”命令不起作用,“cd”与“dir”?

我遇到了cd无法在 Window 节点中工作的问题:

node("Window-node") {                       

    stage('unstash'){
        echo 'unstash..'

        deleteDir()                             

        unstash name: uat_stash
        unstash name: prd_stash

        bat "cd ${path}"
        bat "mkdir ${params.tag_name}"          

    }
}
Run Code Online (Sandbox Code Playgroud)

问题发生在bat "cd ${path}",它并没有真正转到特定路径,因此mkdir失败。

path是 jenkins 工作区之外的某个地方,当我在下面使用时,它工作正常:

dir("${path}") {
    bat "mkdir ${params.tag_name}"
}
Run Code Online (Sandbox Code Playgroud)

我不太确定为什么,但我不喜欢使用,dir因为它会创建一个临时文件夹xxx@tmp,但在 Jenkins 工作完成后永远不会清理。

有谁知道为什么cd失败?或者,我可以在dir不创建 Jenkins 临时文件夹的情况下使用吗?

groovy jenkins jenkins-pipeline

3
推荐指数
1
解决办法
4922
查看次数