美文网首页
java学习重难点

java学习重难点

作者: 微笑达人_4b5d | 来源:发表于2017-11-26 09:26 被阅读0次

    三人行必有我师,人生是需要不断学习的,在这里我们相遇就是缘分,希望各位可以看完这篇文章,也欢迎大家在下面留言讨论,天冷了,也动动手指转发收藏一下,谢谢大家!

    在Java中修饰符总共有一下几种:

    1.访问控制修饰符

    分别有:public private protected,等

    2.其它修饰符

    分别有:abstract,final,static,native,synchronized,transient,volatile等

    (1)对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误。但是用这个修饰符也有一定的限制,就是在方法中不能对参数做任何修改。

    (2)不过一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类。

    (3)一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。

    多线程中的几个方法区别:

    (1)suspend()和resume()方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume()被调用,才能使得线程重新进入可执行状态,suspend()函数让当前线程进入停滞状态,除非收到resume()信号,否则不唤醒。【总之:、resume与suspended一起使用,但是现在jdk声明不再使用这两个方法。】

    (2)wait()与notify()、notifyAll()一起使用:

    wait():导致当前线程等待并使其进入到等待阻塞状态。直到其他线程调用该同步锁对象的notify()或notifyAll()方法来唤醒此线程。

    notify():唤醒在此同步锁对象上等待的单个线程,如果有多个线程都在此同步锁对象上等待,则会任意选择其中某个线程进行唤醒操作,只有当前线程放弃对同步锁对象的锁定,才可能执行被唤醒的线程。

    notifyAll():唤醒在此同步锁对象上等待的所有线程,只有当前线程放弃对同步锁对象的锁定,才可能执行被唤醒的线程。

    (3)sleep让当前的正在执行的线程暂停指定的时间,并进入阻塞状态。在其睡眠的时间段内,该线程由于不是处于就绪状态,因此不会得到执行的机会。即使此时系统中没有任何其他可执行的线程,出于sleep()中的线程也不会执行。因此sleep()方法常用来暂停线程执行。

    【注意:】我们需要注意如下几点:

    1.wait()方法执行后,当前线程立即进入到等待阻塞状态,其后面的代码不会执行;

    2.notify()/notifyAll()方法执行后,将唤醒此同步锁对象上的(任意一个-notify()/所有-notifyAll())线程对象,但是,此时还并没有释放同步锁对象,也就是说,如果notify()/notifyAll()后面还有代码,还会继续进行,知道当前线程执行完毕才会释放同步锁对象;

    3.notify()/notifyAll()执行后,如果右面有sleep()方法,则会使当前线程进入到阻塞状态,但是同步对象锁没有释放,依然自己保留,那么一定时候后还是会继续执行此线程,接下来同2;

    4.wait()/notify()/nitifyAll()完成线程间的通信或协作都是基于不同对象锁的,因此,如果是不同的同步对象锁将失去意义,同时,同步对象锁最好是与共享资源对象保持一一对应关系;

    5.当wait线程唤醒后并执行时,是接着上次执行到的wait()方法代码后面继续往下执行的。

    最后,如果想有一群“臭味相投”的朋友来一起交流学习的话,欢迎大家搜索群460570824,让我们共同进步!

    相关文章

      网友评论

          本文标题:java学习重难点

          本文链接:https://www.haomeiwen.com/subject/noxkbxtx.html