黑马程序员之java学习笔记16

1. 线程同步问题:

   1) 关键字synchronized的作用:

      a. 每个对象都会有一个锁(lock,当访问该对象声明为synchronized的方法时,该

         对象就会被锁住,此时任何其他线程都不能访问该声明为synchronized的方法,

线程消亡或出现异常,锁解开。其他线程才能访问该声明为synchronized的方法。

      b. 如果一对象声明有多个synchronized方法,当某一线程访问其中的任何一个synchronized方法时,该对象就会被锁住。其他线程不能访问其他任何synchronized    方法。

       c. 当一个对象声明有多个synchronized static方法时,某一线程访问其中任何一个synchronized static方法,这时锁上的不是该对象,而是该对象所对应的Class对象(java的一个类无论有多少个对象,都会对应唯一个Class对象。)因此,当有多个线程分别访问该类的多个对象的synchronized static方法时,执行都是由顺序。也就是说一个线程先执行完,另一个线程再执行。

        d.静态的synchronized方法,锁住的是一个对象;非静态的synchronized方法,锁住的是该对象对应的唯一的Class对象。

        e. synchronized代码块:锁住的是synchronized关键字括号里面一个对象。

           如: Object obj = new Object();

Synchronized(obj){

   具体代码

}

           Synchronized代码块可以达到synchronized方法一样的作用:括号里使用this, synchronized(this).

        f. synchronized方法和synchronized代码块比较:synchronized代码块是细粒度的,上锁的范围可以只是几句代码;synchronized方法是粗粒度的,锁的范围就是整个方法。一般推荐使用synchronized代码块。

2. 线程的waitnotify方法:

    1)    线程在调用wait()notify()方法时,首先必须的拥有锁。所以wait方法和notify方法必须的放在synchronized方法或是synchronized代码块中调用。

    2)     线程调用wait方法时发生的事:首先该线程会释放锁,然后等待其他线程使用notify方法或notifyAll方法唤醒,重新获得锁,线程才会继续往下执行。

          

     3)waitnotify方法一定会成对出现。

     4)notify唤醒的线程是等待中线程的任何一个,是任意的,不确定的。

     5)线程在被notify方法唤醒后,应该判断同步中的变量,以免出现变量被其他线程改变的程序的异常情况。

     6)线程的wait方法会释放锁的拥有权,而线程的sleep方法只是让线程短暂的休眠一段时间,但并不会释放锁

 

1.     网络编程

1)     端口:是介于0-65535之间的数字,其作用是标示电脑上的各个对应的程序。

2)     TCP,UDP传输协议:TCP是面向连接的,可靠的,可进行大量数据传输但效率低的协议;UDP是无连接的,不可靠的,每个数据包必须在64kB之内但效率高的协议。

3)     URL简单来说就是网址。URL是网络编程的入口。可以通过URL url = new URL(“http://www.baidu.com”)方式来获取一个URL对象,然后通过url.getProtocol(),url.getHost(),url.getFile(),url.getport(),url.getRef()获取协议名,主机名,文件名,端口名,引用名。

4)     通过URL获取输入流的两种方式:

A(URL url = new URL(“http://www.baidu.com”)URL对象à    (URLConncetion conn=url.openConnection())URLConnection对象à     (InputStream is =conn.getInputStream())InputStream对象

B.  (URL url = new URL(“http://www.baidu.com”)URL对象à    (InputStream is =url.openStream())InputStream对象

       5) 在多线程下,对于单例模式的饿汉式即在getInstance()方法中创建实例对象,有可能会创建两个对象,出现多线程问题。

       6) InetAddress类:表示一个IP地址。主要的静态方法有:InetAddress.getLocalAddress()返回一个本地主机IPInetAddress.getByName(String hostname)根据hostname返回IP。如:

           InetAddress.getByName(“www.sina.com”)就会返回新浪的ip地址。

       7) socket:就是连接运行在网络上的两个程序间的双向通信的端点。

       8)  使用ServerSocketSocket实现服务端和客户端的socket通信:

           A. ServerSocket类的常用的构造方法:public ServerSocket(int port)作用是创建一个服务端套接字,绑定到一个port接口。如果port=0,那么会绑定到任意可用的接口。

           BServerSocketaccept方法,将会监听绑定的接口,并会返回一个新的socket.该方法是一个阻塞方法。

           C.客户端scoket类的主要构造方法scoket(String host,int port)作用,创建一个套接字(socket),并连接到指定主机的指定端口上。、

           D. 实现服务端和客户端的通信,前提必须得获得两个scoket对象的连接,然后才能进行后续的I/O操作。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值