一道笔试题,引发我的基础问题的反思
来源:互联网 发布:淘宝关闭订单规则 编辑:程序博客网 时间:2024/04/20 10:34
我是这样做这道题的:
package 农金圈;//两个线程一个打印a-z,一个线程打印A-Zpublic class ThreadPrint { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Object obj=new Object(); //新建实例,并启动线程 Thread1 t1=new Thread1(obj); Thread2 t2=new Thread2(obj); t1.start(); t2.start(); } //线程第一步 class Thread1 extends Thread { //新建一个代码块进行同步 private Object obj; public Thread1(Object obj) { this.obj=obj; } //线程第二步 //重写run()方法 public void run() { //要进行同步代码块 synchronized(obj) { for(int i=0;i<26;i++) { System.out.println((char)('a'+i)+" "); obj.notifyAll(); try { if(i!=25) { //当线程在活动之前或活动期间处于正在等待、休眠或占用状态且该线程被中断时,抛出该异常 obj.wait(); } } catch(InterruptedException e) { e.printStackTrace(); } } } } } //创立第二个线程 class Thread2 extends Thread { private Object obj; public Thread2(Object obj) { this.obj=obj; } public void run() { synchronized(obj) { for(int i=0;i<26;i++) { System.out.println((char)('A'+i)+" "); obj.notifyAll(); try { if(i!=25) { obj.wait(); } } catch(InterruptedException e) { e.printStackTrace(); } } } } }}
这里告诉我一个错误,一个有关内部类基础的错误。
首先我们要明白一个道理就是有关权限修饰符:public(公开访问权限)、protected(子类访问权限)、default(默认访问权限)、private(当前类访问权限)。
首先我们来明确一下类的基本概念,类分为外部类还有内部类,外部类你既然写在外面那么对应的访问权限,应该就是包还有public,也就是常说到的public和default(默认),在外部类里面加一个内部类,你想想呀,内部类对应的权限是不是private(当前类)还有(子类访问权限),子类访问权限对应的是当前包以及其他包下的子类,public ,default。如果这个时候你用到的是static,那就是静态内部类了。
而我上面的代码很明显,有问题:什么问题呢?
1内部类如果需要加载的话,必须先实例化外部类,然后在用内部类来实现。
2直接用static方法,直接实例化。
3将这个内部类放在与原外部类的外面,相当于没有单独的类的属性。
附上解决2 和解决3的代码,一的还没想出来
package 农金圈;//两个线程一个打印a-z,一个线程打印A-Zpublic class ThreadPrint { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Object obj=new Object(); //新建实例,并启动线程 Thread1 t1=new Thread1(obj); Thread2 t2=new Thread2(obj); t1.start(); t2.start(); } //线程第一步static class Thread1 extends Thread { //新建一个代码块进行同步 private Object obj; public Thread1(Object obj) { this.obj=obj; } //线程第二步 //重写run()方法 public void run() { //要进行同步代码块 synchronized(obj) { for(int i=0;i<26;i++) { System.out.println((char)('a'+i)+" "); obj.notifyAll(); try { if(i!=25) { //当线程在活动之前或活动期间处于正在等待、休眠或占用状态且该线程被中断时,抛出该异常 obj.wait(); } } catch(InterruptedException e) { e.printStackTrace(); } } } } } //创立第二个线程static class Thread2 extends Thread { private Object obj; public Thread2(Object obj) { this.obj=obj; } public void run() { synchronized(obj) { for(int i=0;i<26;i++) { System.out.println((char)('A'+i)+" "); obj.notifyAll(); try { if(i!=25) { obj.wait(); } } catch(InterruptedException e) { e.printStackTrace(); } } } } }}
package Test; class Thread1 extends Thread{ //新建一个代码块进行同步private Object obj;public Thread1(Object obj){ this.obj=obj;} //线程第二步 //重写run()方法 public void run() { //要进行同步代码块 synchronized(obj) { for(int i=0;i<26;i++) { System.out.println((char)('a'+i)+" "); obj.notifyAll(); try { if(i!=25) { //当线程在活动之前或活动期间处于正在等待、休眠或占用状态且该线程被中断时,抛出该异常 obj.wait(); } } catch(InterruptedException e) { e.printStackTrace(); } } } } } class Thread2 extends Thread { //新建一个代码块进行同步 private Object obj; public Thread2(Object obj) { this.obj=obj; } //线程第二步 //重写run()方法 public void run() { //要进行同步代码块 synchronized(obj) { for(int i=0;i<26;i++) { System.out.println((char)('a'+i)+" "); obj.notifyAll(); try { if(i!=25) { //当线程在活动之前或活动期间处于正在等待、休眠或占用状态且该线程被中断时,抛出该异常 obj.wait(); } } catch(InterruptedException e) { e.printStackTrace(); } } } } } public class ThreadPrint { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Object obj=new Object(); //新建实例,并启动线程 Thread1 t1=new Thread1(obj); Thread2 t2=new Thread2(obj); t1.start(); t2.start(); }}
插入一个外文找到答案的图片:
1 0
- 一道笔试题,引发我的基础问题的反思
- 由阿里一道笔试题引发的思考
- 由阿里一道笔试题引发的思考/ String
- 一道有关Java null笔试题引发的思考
- 一道笔试题目引发的思考
- 一道题引发的。。。。。
- 多线程环境下对变量的读写操作的原子性问题(一道百度笔试题引发的思考)
- 多线程环境下对变量的读写操作的原子性问题(一道百度笔试题引发的思考)
- 多线程环境下对变量的读写操作的原子性问题(一道百度笔试题引发的思考)
- 一道题引发的错误
- 阿里巴巴笔试—— 一道动规引发的思考
- 一道有意思的笔试题引发的对于new操作符的思考
- 由一道PHP笔试题引发的思考(关于php5的Iterator接口)
- 一道笔试题引发的一系列js类型转换的坑
- 一道错过的很基础的笔试题
- 一道迅雷笔试题引发的思考?—— 不重复随机算法
- 比特币引发的反思
- 由程序引发的反思
- cogs 272 [NOI1998] 免费馅饼 (dp)
- 远程连接oracle数据库设置
- jquery.pagination.js分页插件的简单使用
- 最大熵模型及Python实现
- 内部类
- 一道笔试题,引发我的基础问题的反思
- 程序员的“第一天”
- Java多线程(2):创建与启动
- linux 不能上网
- Ubuntu中的vi
- 【HDU 2586】测板
- 工厂方法(Factory Method)
- unity3d camera.culling mask
- 异常处理