当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法
java选择题100题

java选择题100题一、选择1、下面哪些是java语言中的关键字?A.si z eofB abstractC NULLD Native2、下面语句哪个是正确的?A char='abc';B long l=oxfff;C float f=0.23;D double=0.7E-3;3、以下程序测试String 类的各种构造方法,试选出其运行效果。
class STR{public static void main(String args[]){String s1=new String();String s2=new String("String 2");char chars[]={'a',' ','s','t','r','i','n','g'};String s3=new String(chars);String s4=new String(chars,2,6);byte bytes[]={0,1,2,3,4,5,6,7,8,9};StringBuffer sb=new StringBuffer(s3);String s5=new String(sb);System.out.println("The String No.1 is "+s1);System.out.println("The String No.2 is "+s2);System.out.println("The String No.3 is "+s3);System.out.println("The String No.4 is "+s4);System.out.println("The String No.5 is "+s5);}}A The String No.1 isThe String No.2 is String 2The String No.3 is a stringThe String No.4 is stringThe String No.5 is a stringB The String No.1 isThe String No.2 is String 2The String No.3 is a stringThe String No.4 is tringThe String No.5 is a stringC The String No.1 isThe String No.2 is String 2The String No.3 is a stringThe String No.4 is strinThe String No.5 is a stringD 以上都不对4、下面语句段的输出结果是什么?int i = 9;sw itch (i) {default:System.out.println("default"); case 0:System.out.println("zero"); break;case 1:System.out.println("one"); case 2:System.out.println("two"); }A defaultB default, zeroC error default clause not definedD no output displayed二、多项选择1、下面哪些语句能够正确地生成5个空字符串?A String a[]=new String[5]; for(int i=0;i<5;a[++]="");B String a[]={"","","","",""};C String a[5];D String[5]a;E String []a=new String[5]; for( int i=0;i<5;a[i++]=null);2、下面哪些选项将是下述程序的输出?public class Outer{public static void main(String args[]){Outer: for(int i=0; i<3; i++)inner:for(int j=0;j<3;j++){if(j>1) break;System.out.println(j+"and"+i);}}}A 0 and 0B 0 and 1C 0 and 2D 0 and 3E 2 and 2F 2 and 1G 2 and 03、下面哪个语句正确地声明一个整型的二维数组?A int a[][] = new int[][];B int a[10][10] = new int[][];C int a[][] = new int[10][10];D int [][]a = new int[10][10];E int []a[] = new int[10][10];JAVA笔试题选择题1下面哪个是正确的类声明?假设每一段文本都做为一个名称为Fred.java的文件的全部内容?a).public class Fred{public int x = 0;public Fred (int x){this.x=x;}}b).public class fred{public int x = 0;public Fred (int x){this.x=x;}}c).public class Fred extends MyBaseClass, MyOtherBaseClass{ public int x = 0;public Fred(int xval){x=xval;}}d).protected class Fred{private int x = 0;private Fred (int xval){x=xval;}}A. a)B. b)C. c)D. d)2.在类设计中,类的成员变量要求仅仅能够被同一package下的类访问,请问应该使用下列哪个修辞词A. protectedB. publicC. privateD. 不需要任何修辞词3.下面那个是Runable接口的方法?A. runB. startC. yieldD. stop4.给出类框架如下:class Example{private int x;//rest of class body…}假定通过java Example调用x,下列哪个语句能够使得在Example.java的main 方法中直接访问x?A. 声明x为public而不是privateB. 声明x为static而不是privateC. 声明x为protected而不是privateD. 声明x为final而不是private5.给出:以下类public class ReturnIt{ReturnType methodA(byte x,double y){return (short)x/y*2;}}对于在第二行的方法methodA,他的返回值的类型应该是A. intB. byteC. longD. shortE. floatF. double6.下面列出的那个是java的保留字?A. ifB. gotoC. whileD. caseE. then7.十进制变量i的值为12,那么八进制的变量i的值为:A. O08B. O10C. O12D. O14E. O168.下列哪些说法是正确的?A. 在collection类树上,最顶层的类叫做CollectionB. collection接口有个方法是enumeratorC. interator方法返回一个Vetor类的实例D. set接口是为了那些不重复的元素设计的9.现有下列代码片断:switch(x){case 1: System.out.println("Test 1");break; case 2:case 3: System.out.println("Test 2");break; default: System.out.println("end");}X为何值时将输出"T est2"A. 1或2B. 1或2或3C. 2或3D. 3E. default10.public class Test{public int aMethod(){static int i=0;i++;return i;}public static void main(String args[]){ Test test = new Test();test.aMethod();int j=test.aMethod();System.out.println(j);}}结果是什么?A. 编译失败B. 编译成功和程序打出"0"C. 编译成功和程序打出"1"D. 编译成功和程序打出"2"11. 选择有效的java命名A. userNameB. %passwdC. 3d_gameD. $chargeE. this12. 变量 "result" 是 boolean类型,下列那些表达式是合法的A. result = true;B. if ( result ) { // do something... }C. if ( result!= 0 ) { // so something... }D. result = 113。
线程练习题——精选推荐

线程练习题答:有两种实现方法,分别是继承Thread类与实现Runnable接口用synchronized关键字修饰同步方法反对使用stop,是因为它不安全。
它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。
结果很难检查出真正的问题所在。
suspend方法容易发生死锁。
调用suspend 的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。
此时,其他任何线程都不能访问锁定的资源,除非被”挂起”的线程恢复运行。
对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。
所以不应该使用suspend,而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。
若标志指出线程应该挂起,便用wait命其进入等待状态。
若标志指出线程应当恢复,则用一个notify重新启动线程。
2、sleep 和 wait 有什么区别?答:sleep是线程类的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。
调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法后本线程才进入对象锁定池准备获得对象锁进入运行状态。
3、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
答:如果数据将在线程间共享。
例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
4、启动一个线程是用run还是start?答:启动一个线程是调用start方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。
corejava部分面试题

一. Java基础部分面试题1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?答:可以包括但公共类只能有一个、且与源文件名相同2、Java有没有goto?答:有、但是是作为保留字存在的。
3、说说&和&&的区别。
答:在java中,这两个符号都属于逻辑运算符与的操作。
但&&表示的是短路运算,所谓的短路运算是,与运算中,两边的表达式的布尔值,如果有一个为假,另外一个就不需要进行判断了。
最为常见的地方是,if(o!=null&&o.equals(s)) 如果第一个为false 那么不会对第二个式子判断,但如果是非短路运算符& 会对第二个判断,但此时o为空,会抛出NullPointerExcetption异常而&还有取地址的作用常用来对一个整数的后四bit位计算(常和ox0f进行运算)。
4、在JAVA中如何跳出当前的多重嵌套循环?答:关键字常见的有return、ok标号和break。
用法上:ok是使用带有ok标号的break 语句我最常用的不是这一种,而是return和让外层的循环条件表达式的结果可以受到内层循环代码的控制。
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?答:可以作用在byte、short、int、char(及以上四种的包装类)7.0之后支持String 和枚举.可以理解为 expression值只能是整型表达式和枚举常量6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?答:错误在于s1+1是一个短整型和一个1相加 1作为字面值是byte、short、int通用的,但在进行刚才的加法运算时,会被认为是一个整型。
整型和短整型相加会出现自动类型提升。
将提升后的整型值赋值给一个短整型会报错而直接给short赋值一个1不会被认为是整型,只有在加法运算时会。
synchronized原理

synchronized原理
一、synchronized关键字
synchronized是Java中的一个关键字,它是用来保证多线程同步访问共享资源的
一种机制。
它能够保证同一时间只有一个线程可以执行某段代码,从而避免了多线程访问共享资源导致的数据不一致性问题。
二、synchronized原理
1. 基本原理
synchronized锁定的是一个对象,当一个线程获取了锁后,其他线程就不能再访
问这段代码,直到当前线程释放锁,其他线程才能申请到锁,执行这段代码。
2. 内存可见性
synchronized锁定的对象会引起其他线程对它的更新的可见性,也就是内存可见性。
其实,也是因为synchronized的内存可见性,才能保证修改操作的原子性、
同步性,因此能够保证多线程同步访问共享资源的安全性。
当一个线程调用synchronized方法或者改成synchronized关键词修饰的代码
块时,发生如下动作:
(1)线程获得指定对象的对象锁;
(2)线程从主内存拷贝锁对象的副本到它的工作内存;
(3)线程执行同步代码;
(4)线程将局部变量同步回主内存;
(5)线程释放指定对象的对象锁。
三、总结
synchronized是Java中一个比较常用的关键字,它能使线程安全的访问共享资源,它的基本原理是:当一个线程调用了synchronized方法或代码块时,它就获得了
指定对象的对象锁,同时也会造成内存可见性,从而达到保证修改操作的原子性、同步性的目的。
精选Java笔试题目

精选Java笔试题目在JAVA中,往往都会有面试题的。
下面YJBYS小编为大家精心搜集了关于精选Java题目,欢迎大家参考借鉴,希望可以帮助到大家!1、面向对象的特征有哪些方面1.抽象2.继承3.封装4.多态性2、String是最基本的数据类型吗?基本数据类型包括byte、int、char、long、float、double、boolean和short。
ng.String类是final类型的,因此不可以继承这个类、不能修改这个类。
为了提高效率节省空间,我们应该用StringBuffer 类3、int 和Integer 有什么区别?Java提供两种不同的类型:引用类型和原始类型(或内置类型)。
Int是java的原始数据类型,Integer是java为int提供的封装类。
Java为每个原始类型提供了封装类。
原始类型封装类boolean Booleanchar Characterbyte Byteshort Shortint Integerlong Longfloat Floatdouble Double引用类型和原始类型的行为完全不同,并且它们具有不同的语义。
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。
对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。
4、String 和StringBuffer的区别JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。
这个String类提供了数值不可改变的字符串。
而这个StringBuffer类提供的字符串进行修改。
当你知道字符数据要改变的时候你就可以使用StringBuffer。
典型地,你可以使用StringBuffers来动态构造字符数据。
5、运行时异常与一般异常有何异同?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
Java笔试题以及答案

Java面试题以及答案1.J2EE是什么?答:Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。
所属层次包括客户层(clietn tier)组件,web层和组件,Business 层和组件,企业信息系统(EIS)层。
2.J2EE是技术还是平台还是框架?答:J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。
3.MVC的各个部分都有那些技术来实现?如何实现?答:MVC是Model-View-Controller的简写。
"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB 组件实现),"V iew" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。
这些组件可以进行交互和重用。
6.C/S 与B/S 区别:答:有如下八个方面的不同:(1)硬件环境不同: (2)对安全要求不同(3)对程序架构不同(4)软件重用不同(5)系统维护不同(6)处理问题不同(7)用户接口不同(8)信息流不同7.什么是JNDI答:(Java Naming & Directory Interface)JA V A命名目录服务。
主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
8.什么是JMS答:(Java Message Service)JA V A消息服务。
synchronized锁方法

synchronized锁方法
Java中的synchronized锁方法是一种保证线程安全的方法。
当一个线程进入synchronized锁方法时,该方法会被锁定,其他线程必须等待该方法执行完毕才能进入。
这样可以避免多个线程同时访问共享资源造成数据不一致的问题。
synchronized锁方法可以用在实例方法和静态方法上。
对于实例方法,锁定的是当前实例对象(即this);对于静态方法,锁定的是当前类的Class对象。
在使用synchronized锁方法时,需要注意以下几点:
1. 锁定的是当前对象或类,而非方法名或代码块。
2. synchronized锁方法只能保证同一个实例对象或同一个类的线程安全。
如果不同实例对象或不同类的线程同时访问,仍然可能会出现线程安全问题。
3. synchronized锁方法会影响程序的执行效率。
因为每次只能有一个线程进入锁定的方法,其他线程必须等待,所以会增加程序的执行时间。
因此,在使用synchronized锁方法时,需要根据具体情况进行权衡,选择合适的同步方式。
- 1 -。
synchronized作用范围和用法

synchronized作用范围和用法synchronized是Java的关键字之一,用于实现多线程的同步控制。
它的作用是控制多线程对同一个共享资源的访问,以避免多线程并发操作导致的数据不一致或冲突问题。
synchronized可以应用于方法、代码块和静态方法,下面将详细讨论这些用法。
1. 方法级别的synchronized:在方法的声明中使用synchronized关键字可以实现对整个方法的同步控制。
当一个线程进入一个带有synchronized关键字的方法时,它会自动获得这个方法的锁,其他线程将被阻塞,直到该线程执行完方法并释放锁。
该方法在整个执行期间只能被一个线程访问,从而确保了线程安全。
2. 代码块级别的synchronized:除了整个方法级别,还可以在方法中使用synchronized关键字来限制某些代码块的访问。
使用synchronized代码块时,必须指定一个对象作为该代码块的锁。
当线程进入代码块时,它会尝试获得锁,如果锁被其他线程占用,则该线程将被阻塞,直到锁被释放。
可以使用任意非null的对象作为锁,只要不同的线程都能够访问到同一个锁对象。
3. 静态方法级别的synchronized:除了在实例方法级别上进行同步控制,synchronized还可以用于静态方法上。
使用synchronized关键字修饰的静态方法会对该静态方法所属的类对象进行加锁,即类锁。
与实例方法不同的是,类锁的作用范围是整个类,而不是该类的对象。
因此,即使多个线程访问不同的实例方法,如果这些方法都属于同一个类,它们也会相互阻塞。
synchronized的使用可以避免多线程环境下的数据竞争和不一致性,保证线程安全。
它可以控制对共享资源的访问、修改和更新,确保一次只有一个线程能够对共享资源进行操作,从而避免了互斥和并发访问导致的数据错误。
synchronized还具有可见性,当一个线程释放锁时,它会将最新的数据刷新到主内存,从而保证其他线程能够看到最新的数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?(2nd)
日前在网上见到一道Java笔试试题,如题所述。
给出的答案如下:
答:不能,一个对象的一个synchronized方法只能由一个线程访问。
本人认为有些所答非所问。
故写了两个demo进行测试。
发现答案要分三种情况讨论。
情况一:
当一个线程进入一个对象的一个synchronized方法后,其它线程访问该对象的非同步方法。
代码如下:
package com.mutithreading.Object;
public class InvokedObject
{
public synchronized void synchronizedMethod()
{
System.out.println("Invoked synchronizedMethod !") ;
try{
Thread.sleep(10000) ;
} catch(InterruptedException e) {
e.printStackTrace();
}
}
public void generalMethod()
{
System.out.println("Invoked generalMethod ...") ;
}
}
package com.mutithreading.threads;
import com.mutithreading.Object.InvokedObject; public class ThreadOne implements Runnable { private InvokedObject object;
public ThreadOne(InvokedObject object)
{
this.object= object ;
}
public void run() {
object.synchronizedMethod() ;
}
}
package com.mutithreading.threads;
import com.mutithreading.Object.InvokedObject; public class ThreadTwo implements Runnable { private InvokedObject object;
public ThreadTwo(InvokedObject object)
{
this.object= object ;
}
public void run() {
// TODO Auto-generated method stub
object.generalMethod() ;
}
}
package com.mutithreading.client;
import com.mutithreading.Object.InvokedObject; import com.mutithreading.threads.ThreadOne; import com.mutithreading.threads.ThreadTwo;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
InvokedObject object = new InvokedObject() ;
ThreadOne one = new ThreadOne(object) ;
ThreadTwo two = new ThreadTwo(object) ;
Thread threadOne = new Thread(one) ;
Thread threadTwo = new Thread(two) ;
threadOne.start() ;
threadTwo.start() ;
}
}
运行结果:
一个线程在访问一个对象的同步方法时,另一个线程可以同时访问这个对象的非同步方法。
情况二:
当一个线程进入一个对象的一个synchronized方法后,其它线程也访问该同步方法。
运行结果:
一个线程在访问一个对象的同步方法时,另一个线程不能同时访问这个同步方法。
(代码略)
情况三:
当一个线程进入一个对象的一个synchronized方法后,其它线程同时访问该对象的另一个同步方法。
此处仅给出对InvokedObject类做出的修改代码:
package com.mutithreading.Object;
public class InvokedObject
{
public synchronized void synchronizedMethod1()
{
System.out.println("Invoked synchronizedMethod1 !") ;
try{
Thread.sleep(10000) ;
} catch(InterruptedException e) {
e.printStackTrace();
}
}
public synchronized void synchronizedMethod2()
{
System.out.println("Invoked synchronizedMethod2 !") ;
}
}
运行结果:
一个线程在访问一个对象的同步方法时,另一个线程不能同时访问这个对象的另一个同步方法。