Java笔试面试题整理第五波

本系列整理Java相关的笔试面试知识点,其他几篇文章如下:


1、实现多线程的两种方法

实现多线程有两种方法:继承Thread和实现Runnable接口。
继承Thread:
以卖票为例:    
public class MyThread extends Thread {
    private static int COUNT = 5;
    private int ticket = COUNT;
    private String name;
    public MyThread(String s){
        name = s;
    }
    @Override
    public void run() {
        for(int i = 0; i < COUNT; i++){
            if(ticket > 0){
                System.out.println(name + "-->" + ticket--);
            }
        }
    }

测试使用:       
MyThread thread1 = new MyThread("thread1");
        MyThread thread2 = new MyThread("thread2");
        thread1.start();
        thread2.start();
输出:
thread1-->5
thread2-->5
thread1-->4
thread2-->4
thread1-->3
thread2-->3
thread1-->2
thread2-->2
thread1-->1
thread2-->1

可以看到,这种方式每个线程自己拥有了一份票的数量,没有实现票的数量共享。下面看实现Runnable的方式:
实现Runnable接口:
public class MyRunnable implements Runnable {
    private static int COUNT = 5;
    private int ticket = COUNT;

    @Override
    public void run() {
        for(int i = 0; i < COUNT; i++){
            if(ticket > 0){
                System.out.println("ticket-->" + ticket--);
            }
        }
    }
}
测试使用:       
 MyRunnable runnable = new MyRunnable();
        new Thread(runnable).start();
        new Thread(runnable).start();
输出:
ticket-->5
ticket-->3
ticket-->2
ticket-->1
ticket-->4
可以看到,实现Runnable的方式可以实现同一资源的共享
实际工作中,一般使用实现Runnable接口的方式,是因为:
(1)支持多个线程去处理同一资源,同时,线程代码和数据有效分离,体现了面向对象的思想;
(2)避免了Java的单继承性,如果使用继承Thread的方式,那这个扩展类就不能再去继承其他类。

拓展:
Thread的start()和run()方法区别:
start()方法用于启动一个线程,使其处于就绪状态,得到了CPU就会执行,而直接调用run()方法,就相当于是普通的方法调用,会在主线程中直接运行,此时没有开启一个线程
可以看第一篇总结中,关于线程启动

下列方法中哪个是执行线程的方法? ()
A、run()    B、start()    C、sleep()    D、suspend()

正确答案:A
run()方法用来执行线程体中具体的内容
start()方法用来启动线程对象,使其进入就绪状态
sleep()方法用来使线程进入睡眠状态
suspend()方法用来使线程挂起,要通过resume()方法使其重新启动

2、访问控制修饰符(新补充)

关于访问控制修饰符,在第一篇总结中已有详细的介绍。但最近在使用Str
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值