(1).
class Test {
private int data;
int result = 0;
public void m()
{
result += 2;
data += 2;
System.out.print(result + " " + data);
}
}
class ThreadExample extends Thread {
private Test mv;
public ThreadExample(Test mv) {
this.mv = mv;
}
public void run() {
synchronized(mv) {
mv.m();
}
}
}
class ThreadTest {
public static void main(String args[]) {
Test mv = new Test();
Thread t1 = new ThreadExample(mv);
Thread t2 = new ThreadExample(mv);
Thread t3 = new ThreadExample(mv);
t1.start();
t2.start();
t3.start();
}
}
①使用 synchronized加同步锁,使三个线程依次进行操作mv()方法;
②三个线程:
t1.strart(); result=2; data=2;
t2.strart(); result=4; data=4;
t3.strart(); result=6; data=6;
③在 System.out.print(result + " " + data);中使用的是print,不可以自动换行,所以答案为2 24 46 6
拓展:run()和start()的区别?
a.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程。
b.run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码; 程序中只有主线程——这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。
(2).要使对象具有序列化能力,则其类应该实现如下哪个接口(A )。
A java.io.Serializable B java.lang.Cloneable, C java.lang.CharSequence D java.lang.Comparable
A.Serializable接口是给类实现序列化的;
B.Cloneable接口是实现克隆的;
C.
D.Comparable接口用来实现对它的每个每个类的对象就行有序排列
(3)不考虑反射,关于私有访问控制符 private 修饰的成员变量,以下说法正确的是(C)
A. 可以三种类所引用:该类自身、与它在同一包中的其他类,在其他包中的该类的子类
B.可以被两种类访问和引用:该类本身、该类的所有子类
C.只能被该类自身所访问和修改
D.只能被同一个包中的类访问
(4)Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 (12,-11).
round()方法:求本身的四舍五入。
拓展:Math.ceil求最小的整数,但不小于本身;
Math.floor求最大的整数,但不大于本身;
Math.round求本身的四舍五入;(返回int或long)
Math.rint求本身的四舍五入;(返回double)
Math.abs求本身的绝对值;
Math.max与Math.min,比较两个数的最大值,最小值;
public class Main {
public static void main(String[] args) {
System.out.println(Math.floor(1.3));
System.out.println(Math.round(11.5));
System.out.println(Math.ceil(1.3));
System.out.println(Math.abs(-1.4));
System.out.println(Math.max(12,34));
System.out.println(Math.min(12,34));
}
}
(5). 假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()
public class A {
public int i;
static String s;
void method1(){}
static void method2(){}
}
A System.out.println(a.i); B a.method1(); C A.method1(); D A.method2();
静态成员和静态方法, 可以直接通过类名进行调用,其他的成员和方法则需要进行实例化成对象之后, 通过对象来调用。
应该是a.method1();