




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
传智播客-java 基础 许正Day14总结:1、 wait和sleep的区别:(面试题)1、 sleep指定时间,wait可以指定时间,也可以不用指定时间。2、 wait方法必须定义在同步中,sleep方法不一定。3、 在同步中wait sleep对于执行权和锁的处理不同:i. Sleep释放CPU执行权,但是没有释放锁。ii. Wait释放执行权、释放锁。实现代码:Public void run()Synchronized(this)Codesleep(10);/此线程进入冻结状态,释放了执行权,并没有释放锁。Wait();/等待状态下,释放执行权、释放锁,因为它需要被对象唤醒,所以要释放锁Public void method()Synchronized(this)notifyAll();/唤醒上面所有的线程。但是此时t0、t1并没有执行,因为锁还在此线程中,只有当它执行完毕之后,释放锁。它们获取锁之后才有机会执行。2、 停止线程:1、 Stop方法已经过时,为什么?因为该方法具有不固定的安全性。如何停止线程?只有一种方法:线程执行的代码结束,线程会自动终止。1、 run方法中通常有循环,所以只要循环结束即可。所以只要控制循环条件。最简单的方式就是定义标记。2、 如果run中有同步可以让线程出现冻结状态的方法,比如wait那么线程就不会去读取标记。这时必须让线程恢复到运行状态才可以有机会读取到标记,所以通过正常的恢复方法比如notify、sleep时间到,但是如果没有办法正常恢复,就必须使用强制手段,interrupt方法,强制将线程的冻结状态清除,让线程恢复运行。其实就是让线程重新获取读取标记、结束。但是别忘了强制动作会产生异常要处理。实现代码:StopThreadDemo.java class StopThread implements Runnableprivate boolean flag=true;/定义标记控制住循环。public synchronized void run()while(flag)/开始true、此时定义标记控制循环。trywait();/当存在同步时,wait方法不会让线程去读取标记。此时主线程结束了,但是这两个线程却在这里等待了。并没有结束。catch (InterruptedException e)System.out.println(Thread.currentThread().getName()+.Exception);setFlag();/如果发生了强制中断,只要把状态切断到假。System.out.println(Thread.currentThread().getName()+.);public void setFlag()flag=false;class StopThreadDemo public static void main(String args) StopThread st=new StopThread();Thread t1=new Thread(st);Thread t2=new Thread(st);t1.start();t2.setDaemon(true);/标记成了守护线程。t2.start();for(int x=0; ;x+)if(x=50)st.setFlag();errupt();/t1将它的冻结状态强制结束。errupt();/中断方法。其实不是中断线程。而且还抛出了异常。/其实会将冻结中的线程强行恢复到运行状态,就会读到标记。这就是中断线程。并不是结束线程。一定要注意要区分。/break;System.out.println (Thread.currentThread().getName()+.);System.out.println(Hello World!);3、守护线程:setDaemon();线程标记,守护线程,当正在运行的线程是守护线程时,JVM自动退出,该方法在开启之前调用,也就是说在start方法之前调用。线程分两种:前台线程:自己创建的线程都是前台线程。后台线程:一旦调用了此方法为守护线程之后的线程都是守护线程。区别:都是线程,启动后都再抢夺CPU的执行权,这里是没有区别的,最大的区别就是如果线程结束了,正在运行的后台线程也随着结束,简单的说后台线程是以来前台线程而执行的。4、线程细节:1、join:当A线程执行到B线程时,那么A线程就会等待,等B执行完毕,A才会执行。代码实现:D1.join();d1加入,说明了主线程必须先释放执行权给它,等到d1结束之后主线程才恢复执行状态,所以输出结果是等d1全部都执行完毕之后,才有其他线程的交替执行。记住:谁把执行权给了谁,就只和给的对象的执行权有关,等它结束之后,就会重新获取执行记住:主线程是因为谁放弃了执行权,就只和那个线程有关系权,与其他线程无关。2、优先级:代表抢夺资源的频率。有两种方法:getPriority setPriority来获取优先级和设置优先级,只有十个数字可以使用1-10这十个数字,同时线程中提供了几个特殊的方法:线程类中提供了MAX_PRIORITY MIN_PRIORTY NORM_PRIORTY。3、yield:结束该线程,释放执行权。4、toString();获取线程详细信息,包括线程组、线程名、所属线程。实现代码:ThreadMethodDemo.java5、 string类:1、字符串的特点:1、 java中用String类来描述字符串。2、 字符串是一个特殊的对象,一旦初始化就不可以被改变,因为是常量。面试题1:String s=abc;String s1=new Strng(abc);是否相同?前者abc是一个对象。后者是两个对象,new string()代表一个对象,abc也代表一个对象。Sop(s1=s2);=比较的是数据。falseSop(s1.equals(s2);比较的是内存的地址值,equals覆写了Object类中的equals方法。True面试题2:String a=abcd;/在缓冲池创建了一个abcd的字符串。String a1=ab;/a1和a2都是变量,无法确定。String a2=cd;String b=a1+a2;/b是要重新进行分配的。String c=ab+cd;/两个都是常量值,用连接符连接在一起还是字符创。abcdSystem.out.println(a=b:+(a=b);/falseSystem.out.println(a=c:+(a=c);/true2、 常见操作方法:1、 获取:a) 获取长度:Int length();数组长度是个属性,字符串是个方法b) 获取字符串中的字符:charAt(int index);返回值是一个字符。c) 一个字符或者一个字符串在一个字符串中的位置Int indexof(int ch)Int indexof(int ch,int fromIndex)Int indexof(ch,fromIndex)Int indexof(srting,fromindex)Int lastIndexof(ch);注意:这些获取索引位的方法,如果没有查找的内容,返回-1,所以这个方法。d) 获取部分字符串:String substring(begin,end)2、 判断:a) 是否包含指定的字符串Boolean contains(String)b) 是否是以指定的字符串开头Boolean startsWith(String)c) 是否是以指定的字符串结尾Boolean endwith(String)d) 忽略大小写判断字符串Boolean equalsIgnoreCase(string)3、 转换:a) 将字符串转成大小写String toLowerCase();String toUpperCase();b) 将字符串转成数组Byte getBytes();Char getChar();c) 将字符串转成字符串数组Stringd) 将字符串中的内容进行替换String replace(oldch1,new ch2)String replace(string1,string2)e) 去除字符串两端的空白Trim();如何查阅API文档的小技巧,先查找返回值类型,缩小查找范围。实现代码:ublic static void main(String args) /stringMethod4();String str = ab c ;System.out.println(-+str.trim()+-);String s = String.valueOf(4);System.out.println(4+);System.out.println(ab+cd);System.out.println(ab.concat(cd);private static void stringMethod4() String str = lisi.wangwu.zhaoliu;String strs = str.split(.);for (int i = 0; i strs.length; i+) System.out.println(strsi);str = hello;String s = str.replace(a, k);System.out.println(s=+s);System.out.println(str);private static void stringMethod3() String str = aBCd;String s = str.toLowerCase();System.out.println(s);String s1 = str.toUpperCase();System.out.println(s1);System.out.println(str);char arr = str.toCharArray();for(int x = 0; xarr.length; x+)System.out.println(arrx);private static void stringMethod2() String str = ThreadDemo.java;System.out.println(contains(Demo):+str.contains(Demo);System.out.println(starsWith(Thread):+str.startsWith(Thread);System.out.println(endsWith(.java):+str.endsWith(.java);System.out.println(isEmpty:+str.isEmpty();str = abc;说System.out.println(str.equalsIgnoreCase(abC);private static void stringMethod() String str = abcdaef;System.out.println(length;+s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 出版工作发言稿
- 2013.1.13法律逻辑学试题及答案(经典)
- 林场护林员培训
- 夏季高温防暑培训
- 二零二五版建筑工程设计施工一体化转让合同
- 2025版节能建筑瓷砖供货与绿色生活推广合同
- 2025版离婚后共同财产分割子女抚养及财产分割协议
- 2025版文化艺术交流活动组织服务合同模板
- 二零二五版科技研发资源共享服务合同
- 二零二五年度电商跨境电商支付与清算培训合同
- 2025年云南省事业单位招聘考试综合类专业能力测试试卷(工程类)难点解析
- 2025年秋期人教版2年级上册数学核心素养教案(第6单元)(教学反思有内容+二次备课版)
- 2025内蒙古西部天然气蒙东管道有限公司招聘20人笔试参考题库附带答案详解(10套)
- 2025店铺租赁合同协议书下载
- 2025年国企财务招聘笔试题和答案(基础知识测试题)
- 9型人格培训课件
- 2025年银行安全保卫知识考试题库(含答案)
- 曲靖市商务局招聘公益性岗位人员考试真题2024
- 2025年青岛市中考英语试卷(含答案解析)
- 投资评价管理办法
- 达州水务集团有限公司员工招聘考试真题2024
评论
0/150
提交评论