java练习本(原每日一练)(2019-04-29)

名人名言

昨日翻译

“Success is just a war of attrition. Sure, there’s an element of talent you should probably possess. But if you just stick around long enough, eventually something is going to happen.”

——Dax Shepard

“ “成功只是一场消耗战。当然,你应该拥有一些天赋。但是如果你坚持足够长的时间,最终会发生一些事情。”

——达克斯·塞帕德

今日名言

“The opposite of love is not hate; it’s indifference.”

——Elie Wiesel

2019.04.28问题及解析

题目
public class Test {
    public static void main(String[] args) {
        Add add = new Add();
        ThreadFun thread1 = new ThreadFun(add);
        ThreadFun thread2 = new ThreadFun(add);
        ThreadFun thread3 = new ThreadFun(add);
        thread1.start();
        thread2.start();
        thread3.start();
    }
}


class ThreadFun extends Thread{
    private Add add;
    ThreadFun(Add add){
        this.add = add;
    }
    public void run(){
        synchronized (add){
            add.add();
        }
    }
}


class Add{
    private int num1;
    int num2;
    void add(){
        num1 += 3;
        num2 += 3;
        System.out.print(num1 + " " + num2);
    }
}

请问结果为:

A.0 33 66 9

B.3 36 69 9

C.6 66 69 9

D.3 63 63 3

答案与解析

1.相关知识

继承Thread方法可以创建线程对象,重写run方法后,当调用start方法之后会运行重写后的run方法。

sychronized关键字可以使同一时间只能有一个线程对修饰的代码块进行访问,避免线程冲突的发生

2.代码流程

定义Test类,main方法

new了一个Add类的实例

new了ThreadFun的三个实例,将Add实例作为参数传递

分别调用三个实例的start方法

定义了一个ThreadFun类继承Thread类

私有Add成员变量

ThreadFun有参构造,参数为Add

将参数Add赋值给Add成员变量

重写Thread类的run方法,sychronized对add成员变量进行加锁

调用add成员的add()方法

定义了Add类

定义私有整型变量num1

定义整形变量num2

定义add方法

num1赋值num1+3

num2赋值num2+3

输出num1空格num2

3.答案解析

三个线程启动后任意一个线程有可能执行run方法,最终三个都会执行完。

由于sychronized修饰add实例,所以同一时间只有一个线程可以访问add实例

第一个线程调用add方法时

num1+3=3

num2+3=3

输出结果3空格3

第二个线程调用add方法时,由于线程构造指向同一个实例

因此num1、num2的值会保留

此时num1+3=6

num2+3=6

输出结果为3 36 6

第三个线程同理

输出结果为3 36 69 9

答案选:B

2019.04.29问题

public class Test {
    private float f = 2.0f;
    int i = 1;
    static int j = 2;
    public static void main(String[] args) {
        Test test = new Test();
    }
}

请问结果为:

请问下列哪些使用在main函数中是正确的?

A.test.f = 1.0;

B.System.out.println(this.j);

C.System.out.println(Test.i);

D.System.out.println(Test.j);

往期回顾

java练习本(原每日一练)|(2019-04-28)

java练习本(原每日一练)|(2019-04-27)

java练习本(原每日一练)|(2019-04-26)

java练习本(原每日一练)|(2019-04-25)

java练习本(原每日一练)|(2019-04-24)

java练习本(原每日一练)|(2019-04-23)

java练习本(原每日一练)|(2019-04-22)

java练习本(原每日一练)|(2019-04-21)

java练习本(原每日一练)|(2019-04-20)

java练习本(原每日一练)|(2019-04-19)

java练习本(原每日一练)|(2019-04-18)

java练习本(原每日一练)|(2019-04-17)

java练习本(19_04_16)|继承——访问修饰符、覆盖

java练习本(19_04_15)|lang包类——Math

java每日一练(19_04_12)|循环语句——for

java每日一练(19_04_11)|条件语句——switch

java每日一练(19_04_10)|异常—— try catch finally

java每日一练(19_04_09)|面向对象—— 继承、访问修饰符

java每日一练(19_04_08)|运算符、循环—— for、++自增

java每日一练(19_04_07)|基础数据类型、包装类—— double、float、int、Double

java每日一练(19_04_03)|HashMap、Hashtable

java每日一练(19_04_02)|instanceof关键字

加入我们吧~

眼过千遍,不如手过一遍,一定一定要把自己的想法写出来(想法不论对错,写你所想就是进步),这样才会有所收获,你的每一个留言和分享小刀都会认真回复,彼此学习共同进步~

小刀和小伙伴在学习群里

等你来一起监督学习哦,坚持!加油!

进群请加小刀微信: best396975802

END


微信群请点击公众号菜单进微信群

文字|天堂

排版|花音

你点的每个在看,我都认真当成了喜欢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值