5.java Thread中,run方法和start方法的区别
1.start方法
用 start方法来启动线程,是真正实现了多线程, 通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法。但要注意的是,此时无需等待run()方法执行完毕,即可继续执行下面的代码。所以run()方法并没有实现多线程。
2.run方法
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。
7.若有 double *p,x[10];int i=5;使指针变量 p指向元素 x[5]的语句为()。
A. p=&x[i]; 正确,p为地址,&取址符(x[5]的地址)
B. p=x; x为数组第一个元素的地址,所以p指向了x[0];
C. p=x[i]; p为地址,x[i]为元素
D. p=&(x+i) p为地址,x+i为地址,&(x+i)地址的地址
9.将逻辑代码
int x = ...;
if (x % 2) {
return x - 1;
} else {
return x;
}
用表达式:return x & -2; 替代,以下说法中不正确的是( )
A 计算机的补码表示使得两段代码等价 正确
B 用第二段代码执行起来会更快一些 正确
C 这段代码只适用于x为正数的情况 错误
解析
代码的本意是返回偶数
计算机内部表示的整数的方式为补码,正数为自身,负数为符号位不变其余各位取反加1
理解本体分两部分:
1)-2的补码为1111,1110,正数与-2相与很明显就是使整数变为2的整数倍(相当于减一)
2)负数时,当负数为偶数时,补码的最后一位比为0,与-2相与仍为自身;当为奇数时,补码的最后一位比为1,与-2相与时其它位不变最后一位为1,此时根据负数到源码的转换规则,各位取反加1,此时相当于加上-1
10.下面有关servlet service描述错误的是?
A.不管是post还是get方法提交过来的连接,都会在service中处理 正确
B.doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的错误
C.service()是在javax.servlet.Servlet接口中定义的正确
D.service判断请求类型,决定是调用doGet还是doPost方法正确
解析:
doget/dopost与Http协议有关,是在 javax.servlet.http.HttpServlet 中实现的
11.有以下程序
#include <stdio.h>
#include <stdlib.h>
void fun ( int *pl,int *p2,int *s )
{
s = (int*) malloc(sizeof(int));
*s = *pl + *(p2++ );
}
main( )
{
int a [2] = {l,2},b [2] = {10,20},*s = a;
fun (a,b,s);
printf ( "%d \n", *s);
}
程序运行后的输出结果是?
1
解析: 进入fun时 p3 = s ,即p3 = &a[0].
调用malloc时返回的值是一个int*,实际上 p3 = malloc返回的新指针p4
*p3=p1+(p2++) 即 *p4=p1+(p2++);
p4并不是s,算出来的值赋值到malloc返回的指针p4指向的内存了。