java学习(四)

时间:2019-04-01 01:11:50   收藏:0   阅读:132

学号 20189214 《Java程序设计》第五周学习总结

教材学习内容总结

输入输出

文件系统可以包含3种类型的对象:文件、目录和符号链接。
一个文件或路径是一个java.io.File来表示的,java7之后有了java.nio.file.Path接口。

文件操作:

对象序列化

定义

  1. 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
  2. 在网络上传送对象的字节序列。

    常见场景

  3. Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
  4. 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。

    线程与并发

    首先来区分一下线程与并发:

Thread状态

技术分享图片

Java中线程的创建常见有如三种基本形式:
1.继承Thread类,重写该类的run()方法。
2.实现Runnable接口,并重写该接口的run()方法,该run()方法同样是线程执行体,创建Runnable实现类的实例,并以此实例作为Thread类的target来创建Thread对象,该Thread对象才是真正的线程对象。
3.使用Callable和Future接口创建线程。具体是创建Callable接口的实现类,并实现clall()方法。并使用FutureTask类来包装Callable实现类的对象,且以此FutureTask对象作为Thread对象的target来创建线程。

同步

synchronized的用法

     public class Thread1 implements Runnable {
       Object lock;
       public void run() {  
       synchronized(lock){
     do something
       }
       }
    }
    public class Thread1 implements Runnable {
       public synchronized void run() {  
    ..do something
       }
    }

并发
Callable
一个Callable是一个任务,它返回一个值,也可能抛出一个异常。
future模式:并发模式的一种,可以有两种形式,即无阻塞和阻塞,分别是isDone和get。其中Future对象用来存放该线程的返回值以及状态

ExecutorService e = Executors.newFixedThreadPool(3);
 //submit方法有多重参数版本,及支持callable也能够支持runnable接口类型.
Future future = e.submit(new myCallable());
future.isDone() //return true,false 无阻塞
future.get() // return 返回值,阻塞直到该线程运行结束

高级多线程控制类

  1. ThreadLocal类
    • 用处:保存线程的独立变量。对一个线程类(继承自Thread)
      当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。常用于用户登录控制,如记录session信息。
    • 实现:每个Thread都持有一个TreadLocalMap类型的变量(该类是一个轻量级的Map,功能与map一样,区别是桶里放的是entry而不是entry的链表。功能还是一个map。)以本身为key,以目标为value。
      主要方法是get()和set(T a),set之后在map里维护一个threadLocal -> a,get时将a返回。ThreadLocal是一个特殊的容器。
  2. 原子类(AtomicInteger、AtomicBoolean……)
  3. Lock类 
    • lock: 在java.util.concurrent包内。共有三个实现:

      ReentrantLock
      ReentrantReadWriteLock.ReadLock
      ReentrantReadWriteLock.WriteLock
    • ReentrantLock 可重入的意义在于持有锁的线程可以继续持有,并且要释放对等的次数后才真正释放该锁。

4.容器类
- BlockingQueue阻塞队列。该类是java.util.concurrent包下的重要类,通过对Queue的学习可以得知,这个queue是单向队列,可以在队列头添加元素和在队尾删除或取出元素。类似于一个管道,特别适用于先进先出策略的一些应用场景。普通的queue接口主要实现有PriorityQueue(优先队列).
- ConcurrentHashMap高效的线程安全哈希map。请对比hashTable , concurrentHashMap, HashMap。

网络

java.net.URL

URL 解析:


    import java.net.*;
    import java.io.*;
     
    public class URLDemo
    {
       public static void main(String [] args)
       {
      try
      {
        URL url = new URL("http://www.runoob.com/index.html?language=cn#j2se");
        System.out.println("URL 为:" + url.toString());
        System.out.println("协议为:" + url.getProtocol());
        System.out.println("验证信息:" + url.getAuthority());
        System.out.println("文件名及请求参数:" + url.getFile());
        System.out.println("主机名:" + url.getHost());
        System.out.println("路径:" + url.getPath());
        System.out.println("端口:" + url.getPort());
        System.out.println("默认端口:" + url.getDefaultPort());
        System.out.println("请求参数:" + url.getQuery());
        System.out.println("定位位置:" + url.getRef());
      }catch(IOException e)
      {
     e.printStackTrace();
      }
       }
    }
  

编译运行结果如下:
URL 为:http://www.runoob.com/index.html?language=cn#j2se
协议为:http
验证信息:www.runoob.com
文件名及请求参数:/index.html?language=cn
主机名:www.runoob.com
路径:/index.html
端口:-1
默认端口:80
请求参数:language=cn
定位位置:j2se

URLConnections

URLConnection 方法列表如下:

  1. Object getContent() 检索URL链接内容
  2. Object getContent(Class[] classes) 检索URL链接内容
  3. String getContentEncoding() 返回头部 content-encoding 字段值
  4. int getContentLength() 返回头部 content-length字段值
  5. String getContentType() 返回头部 content-type 字段值
  6. int getLastModified() 返回头部 last-modified 字段值。
  7. long getExpiration() 返回头部 expires 字段值。
  8. long getIfModifiedSince() 返回对象的 ifModifiedSince 字段值。
  9. public void setDoInput(boolean input)
    URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。
  10. public void setDoOutput(boolean output)
    URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。
  11. public InputStream getInputStream() throws IOException 返回URL的输入流,用于读取资源
  12. public OutputStream getOutputStream() throws IOException 返回URL的输出流, 用于写入资源。
  13. public URL getURL() 返回 URLConnection 对象连接的URL

    socket

    客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。
    技术分享图片

教材学习中遇到的问题和解决过程

代码托管

https://gitee.com/shamBryce/JAVA

上周考试错题总结

Which of the following objects could contain the information “eastern standard time”?
(Choose all that apply.)
A .Instant
B .LocalDate
C .LocalDateTime
D .LocalTime
E .ZonedDateTime

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 150/200 2/2 20/20
第二周 200/400 1/3 20/40
第三周 100/500 1/4 10/50
第四周 200/700 1/5 15/65
第五周 1400/2100 1/5 20/85

参考资料

原文:https://www.cnblogs.com/Shambryce/p/10633969.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!