1.多线程的实现有几种方式?实现步骤分别是怎样的?
有两种实现的方式
第一种:①定义一个类MyThread继承Thread类
-
②在MyThread类中重写run()方法
-
③创建MyThread类的对象
-
④启动线程
第二种:①定义一个类MyRunnable实现Runnable接口
-
②在MyRunnable类中重写run()方法
③创建MyRunnable类的对象
④创建Thread类的对象,把MyRunnable对象作为构造方法的参数
⑤启动线程
2.继承Thread类和实现Runnable接口有啥区别?实现Runnable接口的优势体现在哪里?
好处:①将线程任务和线程对象分离,进行解耦。可以实现多个线程共享同一资源;
②不占用继承位
3.线程安全问题时怎么产生的?如何解决线程安全问题,有哪几种方式?
产生原因:线程执行的随机性导致的;
方式:①同步代码块:锁对象是任意对象,但是必须保证多个线程锁对象是同一个
②同步方法
普通同步方法
锁对象是this
静态同步方法
类名.class
③lock锁
手动的开启锁和释放锁,释放锁需要写在finally代码块中
4.sleep()方法和wait()方法的区别?
①sleep调用之后会放弃CPU执行权,但是不会放弃锁对象;Wait CPU执行权和锁对象都放弃
②sleep方法到了时间自动苏醒,去抢夺CPU;wait方法没有线程唤醒不会自己醒
|