我想在特定时间触发 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周期?真的吗?
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在外部类中访问吗?
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"
谁知道为什么?
我有一些与 Android Logcat 相关的问题,我指的是真实设备而不是模拟器中的这些问题:
我有一个程序有很多Log.d(或其他类似的日志功能),我做了一些谷歌搜索,发现这些日志将输出到一个循环的64K缓冲区。我的问题是,那些 64K 缓冲区位于哪里?它位于 RAM 还是文件系统中?我的应用程序退出后它会被删除吗?
我谷歌发现,日志将输出到一个名为/dev/event(不确定)的文件,但我在里面看不到任何与应用程序相关的日志记录,为什么?只能看到与系统相关的日志条目。
每个应用程序都会将其日志输出到不同的日志文件吗?或者它们都转储到同一个日志文件中?这种情况下,我们该如何分离日志呢?
如果日志缓冲区是64K,我们如何增加它?如果我们想将日志重定向到SD卡上的文件,我们如何限制文件大小(当然也使其成为循环)?
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)
上面的输出是相反的。
我怎么能编码"成"和'成'?
我很惊讶单引号和双引号没有在HTML实体4.0中定义,因此StringEscapeUtils无法将这2个字符转义为相应的实体.
还有其他与字符串相关的工具能够做到这一点吗?
HTML实体4.0中没有定义单引号和双引号的原因吗?
除了单引号和双引号之外,是否有任何框架能够将所有unicode字符编码为相应的实体?由于所有的unicode都可以手动转换为十进制实体并以HTML格式显示,所以有什么工具可以自动转换它?
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应用程序,则DAO取DataSource为对象创建执行数据库操作的单个连接. …
我一直在从这里搜索很多类似的答案,但没有一个可以准确地工作。我想计算自定义视图的可见区域,该视图可以被屏幕边缘遮挡,也可以被滚动视图的边缘遮挡,请看下图:
如上所述,黑色是我的屏幕,红色是我的自定义视图,向上滚动一点,我想测量 B 的面积。
如上所述,黑色是我的屏幕,红色是我的自定义视图,蓝色是滚动视图。自定义视图是滚动视图的子视图,它向上滚动一点。我想测量B的面积。
1 )我已经尝试过View.getWindowVisibleDisplayFrame,,,,,但没有一个能准确工作。乍一看它们看起来不错,但是当我滚动视图时,视图从屏幕上消失,不知何故,它向我显示了视图的完整高度和宽度,该视图甚至没有显示在屏幕内。View.getLocalVisibleRectView.getGlobalVisibleRect
2)我尝试View.getLocationOnScreen()手动getLocationInWindow()计算偏移量,获取XY坐标并加上/减去视图(和屏幕)的高度和宽度,但发现这也不容易,因为屏幕顶部总是有额外的菜单栏等,并且会弄乱结果。
3)虽然这在我的情况下不太可能,但我想知道,如果我的视图顶部有一个绝对布局并部分遮挡它,我仍然可以找到该区域吗?(两个布局都在同一个活动中)
我的问题是,有没有简单又准确的方法来计算我想要的面积?
我遇到了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 临时文件夹的情况下使用吗?