下面程序的输出结果是这段代码为什么什么都不输出

这段多线程代码为什么输出是这个样子 - 开源中国社区
当前访客身份:游客 [
当前位置:
public synchronized void foo( B b )
System.out.println("当前线程名: " + Thread.currentThread().getName()
+ " 进入了A实例的foo()方法" );
Thread.sleep(200);
catch (InterruptedException ex)
ex.printStackTrace();
System.out.println("当前线程名: " + Thread.currentThread().getName()
+ " 企图调用B实例的last()方法");
public synchronized void last()
System.out.println("进入了A类的last()方法内部");
public synchronized void bar( A a )
System.out.println("当前线程名: " + Thread.currentThread().getName()
+ " 进入了B实例的bar()方法" );
Thread.sleep(200);
catch (InterruptedException ex)
ex.printStackTrace();
System.out.println("当前线程名: " + Thread.currentThread().getName()
+ " 企图调用A实例的last()方法");
public synchronized void last()
System.out.println("进入了B类的last()方法内部");
public class test implements Runnable
A a = new A();
B b = new B();
public void init()
Thread.currentThread().setName("主线程");
// 调用a对象的foo方法
System.out.println("进入了主线程之后");
public void run()
Thread.currentThread().setName("副线程");
// 调用b对象的bar方法
System.out.println("进入了副线程之后");
public static void main(String[] args)
test dl = new test();
// 以dl为target启动新线程
new Thread(dl).start();
// 调用init()方法
dl.init();
这段代码的输出为什么是这样子
当前线程名: 主线程 进入了A实例的foo()方法
当前线程名: 副线程 进入了B实例的bar()方法
当前线程名: 主线程 企图调用B实例的last()方法
当前线程名: 副线程 企图调用A实例的last()方法
执行了下面这行不应该是输出run函数里面的内容吗?
new Thread(dl).start();
共有1个答案
<span class="a_vote_num" id="a_vote_num_
执行你那一行确实会在新的线程里面调用run,但是新的线程需要等待cpu时间进行调度,所以比主线程慢是对的,你可以在start之后sleep一下再看效果即可!
更多开发者职位上
有什么技术问题吗?
GOD__的其它问题
类似的话题小弟我想问一下以下这段代码为什么会输出这样的结果?不是应该全部为空吗 - PHP当前位置:& &&&小弟我想问一下以下这段代码为什么会输出这样的结果小弟我想问一下以下这段代码为什么会输出这样的结果?不是应该全部为空吗&&网友分享于:&&浏览:1次我想问一下以下这段代码为什么会输出这样的结果?不是应该全部为空吗?
$a1=array(0=&"Dog",1=&"Cat",2=&"Horse",3=&"Bird");
for&($i&=&0;&$i&&&count($a1);&$i++)&{
array_splice($a1,$i,&1);
print_r($a1);
Array&(&[0]&=&&Cat&[1]&=&&Bird&)&
------解决方案--------------------模拟下过程
第一次循环&array_splice($a1,0,&1);&&&&$a1变成了&$a1=array(0=&"Cat",1=&"Horse",2=&"Bird");
第二次循环&array_splice($a1,1,&1);&&&&$a1变成了&$a1=array(0=&"Cat",1=&"Bird");
第三次循环&$i==2&count($11)==2&不符合循环条件&循环退出------解决方案--------------------自己看$a1=array(0=&"Dog",1=&"Cat",2=&"Horse",3=&"Bird");
for&($i&=&0;&$i&&&count($a1);&$i++)&{
&&array_splice($a1,$i,&1);
&&echo&"i=$i&",&print_r($a1,&1),&'&br&';&&
print_r($a1);i=0&Array&(&[0]&=&&Cat&[1]&=&&Horse&[2]&=&&Bird&)&
i=1&Array&(&[0]&=&&Cat&[1]&=&&Bird&)&
Array&(&[0]&=&&Cat&[1]&=&&Bird&)&
问题在于你的起点不对------解决方案--------------------这个不难理解吧
count($a1)每次array_splice移除之后都在变化
$a1=array(0=&"Dog",1=&"Cat",2=&"Horse",3=&"Bird");
for&($i&=&0;&$i&&&count($a1);&$i++)&{
array_splice($a1,$i,&1);
print_r($a1);
第1次循环,$i&=&0,count($a1)=4&&移除Dog,$a1=array(0=&"Cat",1=&"Horse",2=&"Bird");
第2次循环,$i&=&1,count($a1)=3&&移除Horse,$a1=array(0=&"Cat",1=&"Bird");
第3次循环,$i&=&2,count($a1)=2&&没用任何值可以移除,$a1=array(0=&"Cat",1=&"Bird");退出循环
$a1=array(0=&"Cat",1=&"Bird");------解决方案--------------------这里你要注意count($a1),每次循环都要计算一次,但是每次里面的元素都在减少一个,到第三次次循环的时候,元素个数和$i都是2,所以就结束了,所以肯定会剩下两个元素的,即使你把count提出来,即这里直接写4,也肯定有剩余吧,虽然我没有去写写看,但是这里的$i是不断增加的,而第三次循环时,元素还有2个,而已经没有了第三个位置,所以肯定有剩余,你可以在for循环的最后输出下这个$a1,看一下每次都变成了什么,为什么 共&2&页:
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消息了,从而帮助你调式也在RELEASE的时候减少代码量。
使用非常简单,格式如下:
TRACE(&DDDDDDDDDDD&);
TRACE(&wewe%d&,333);
同样还存在TRACE0,TRACE1,TRACE2。。。分别对应0,1,2。。个参数
TRACE信息输出到VC IDE环境的输出窗口(该窗口是你编译项目出错提示的哪个窗口),但仅限于你在VC中运行你的DEBUG版本的程序。
TRACE信息还可以使用DEBUGVIEW来捕获到。这种情况下,你不能在VC的IDE环境中运行你的程序,而将BUILD好的DEBUG版本的程序单独运行,这个时候可以在DEBUGVIEW的窗口看到DEBUGVIE格式的输出了。
------------------第二种方法------------------------------
OutputDebugString is a API function, it is used to help programmer debug the program, which is like
TRACE or afxDump, it is work with Dbgview. in Debug mode it performance as TRACE. But in Release mode
it can be monitor in DbgView.
OutputDebugString is explained in MSDN
The OutputDebugString function sends a string to the debugger for the current application.
VOID OutputDebugString(
LPCTSTR lpOutputString
// pointer to string to be displayed
Parameters:
lpOutputString parameters Pointer to the null-terminated string to be displayed.
Return Values
This function does not return a value.
If the application has no debugger, the system debugger displays the string.
If the application has no debugger and the system debugger is not active,
OutputDebugString does nothing.
void CSdfghfgView::OnRButtonDown(UINT nFlags, CPoint point)
// TODO: Add your message handler code here and/or call default
OutputDebugString(&right button is divssed&);
参数就是你需要输出的字符串了。如果你需要显示数字等,你需要事先格式化字符串。注意WINDOWS CE仅仅支持UNICODE版本,所以你提供的字符串应该转换为UNICODE。使用_tstrcat等来格式化字符串。
如果你的应用程序有一个DEBUGER,那么该函数输出到DEBUGER,否则就输出到系统的DEBUGER,如果两个都没有,该函数什么也不做。
注意,输出到系统DEBUGER的,你可以使用DEBUGVIEW工具查看日志,这样你在程序运行的时候也可以看到日志了。很多程序都使用这种方式来写日志,包括MICROSOFT本身也使用这种方法。
------------------第三种输出方法------------------------------------
当我们要在程序中输出调试信息时,常常以字符串的形式来输出,例如:
printf(&Some debug information here!
这段代码在Debug和Release版下都输出调试信息,这不是我们所要的,一般地大家都会添加
预编译指令,如下所示:
#if _DEBUG
printf(&Some debug information here!
这样就达到了在Debug版里程序输出调试信息,在Release版下不输出调试信息的目的。(在Release版里
连printf函数都没有调用)可如果要在程序里的许多地方输出调试信息,若采用上面的方式会很麻烦;
(至于为什么麻烦,可能就是不愿多敲几次键盘吧,呵呵。。。)
于是大家都想到写个输出函数,代码如下:
void printInfo(char *strInfo)
#if _DEBUG
printf(strInfo);
注:该函数只是演示用的,很简单,没有其他检查字符串功能。
在要输出调试信息的地方,调用如下语句就行:
printInfo(&Some debug information here!
确实,在Debug模式下运行该程序,则输出如下信息:
Some debug information here!
在Release模式下,则没输出什么信息;
我们往往在这个时候认为一切都OK了;如果你认为是,就没必要往下看了;呵呵。。。
虽然在Release版下运行程序没有输出调试信息来,可这些调试信息却留在了二进制的可执行文件里;
我们可以用IDA来打开该Release版的可执行文件,看到如图一所示的信息:
图一:IDA反汇编后的main函数
注:该函数就是main函数
可见调试信息字符串(&Some debug information here!
&)确实存在于Release版的可执行文件里;
我们当然不希望别人看到这些调试信息,那有没有办法来防止该调试信息被编译进Release版的可执行文件里呢?
办法是有的,这里来描述2个方法。
定义如下宏:
#if _DEBUG
#define _D(str) str
#define _D(str) NULL
此时输出语句变为:
printInfo(_D(&Some debug information here!
在Debug模式下运行程序,依然输出调试信息:
&Some debug information here!&;
在Release下,则什么都不输出,此时我们用IDA看一下Release版的二进制文件,则没有发现该调试信息字符串。
如图二示:
图二:IDA反汇编后的main函数
定义如下宏:
#if _DEBUG
void printInfo(char *strInfo)
printf(strInfo);
#define printInfo(str)
注意:该宏把函数printInfo的定义也放进去了;
在Debug模式下运行程序,也同样输出调试信息:
&Some debug information here!&;
在Release下,也什么都不输出,此时我们用IDA看一下Release版的二进制文件,也没有发现该调试信息字符串。
如图三示:
图三:IDA反汇编后的main函数
既然方法一和方法二都能实现同样的功能,那究竟那个方法好呢?
方法一和方法二确实都没在可执行文件里留下调试信息,比较一下图二和图三,我们不难发现:
图二当中多了一个函数调用 call nullsub_1,该函数就是printInfo,虽然该函数什么都不做,
但它却调用了,我们一般也不希望该函数调用,所以方法一中多了一个函数调用,增加了开销,
而方法二当中却没有调用该函数。
下面是程序源代码:
// 程序目的:
// 测试调试时输出的字符串信息
#include &stdio.h&
//#define Method
#ifdef Method
void printInfo(char *strInfo)
#if _DEBUG
printf(strInfo);
#if _DEBUG
#define _D(str) str
#define _D(str) NULL
int main()
printInfo(_D(&Some debug information here!
#if _DEBUG
void printInfo(char *strInfo)
printf(strInfo);
#define printInfo(str)
int main()
printInfo(&Some debug information here!
[喝小酒的网摘]/a/9552.htm
原文:[喝小酒的网摘]/a/9552.htm
IP:218.75.34.87:输出到debug窗口IP:116.205.65.44:debugview 窗口IP:116.205.58.67:vc debugview查错IP:182.48.109.8:vc++ 输出信息IP:222.185.247.254:debugview 调试 C#IP:122.79.61.102:C# DebugViewIP:218.10.13.166:debugview 代码IP:207.46.92.17:vs mfc debugviewIP:219.153.100.145:MFC debugviewIP:180.173.21.43:mfc 输出 debug 输出IP:113.124.47.211:vc++ 输出debug信息IP:113.111.203.199:VC debugview TRACEIP:220.176.213.33:debugview 用法IP:112.81.0.107:输出到 debugviewIP:123.138.39.228:DeBugView如何查看TRACE输出信息IP:111.161.8.12:VC输出信息IP:202.108.130.138:MFC debug printIP:222.71.176.212:怎么使用debugview输出日志IP:222.92.60.190:C# 输出信息到DEBUGVIEWIP:221.6.33.218:debugview mfcIP:58.248.41.90:OutputDebugString 数字IP:116.228.195.130:debugview用法IP:14.153.22.87:DebugViewIP:114.92.168.223:输出到
DebugViewIP:203.156.240.130:MFC 输出到DebugIP:58.251.136.251:debugview如何捕获某一程序的信息IP:166.111.65.215:debugView
VC输出指令IP:61.179.124.18:输出信息到DEBUGVIEW窗口IP:113.104.195.113:MFC工程怎样在DEBUGVIEW输出IP:124.161.181.204:输出到debugview下面这段代码输出是什么?为什么?(java)_百度知道这段代码为什么不能输出值?求教大神!
[问题点数:40分,结帖人haotianxinjian]
这段代码为什么不能输出值?求教大神!
[问题点数:40分,结帖人haotianxinjian]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 jquery输出html代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信