Java(11.21)

目录

java网络编程

 URL:

 组成:

 InetAddress

 方法:

 TCP编程

 UDP编程

线程和进程

多线程实现

 Runnable和Callable的区别:

线程常用方法

死锁


java网络编程

 客户端 -> 服务器
    -TCP
    -UDP

 URL:

统一资源定位符号   
 Class URL表示统一资源定位符,指向万维网上的“资源”的指针。
 资源可以像文件或目录一样简单,或者可以是对更复杂的对象的引用,例如对数据库或搜索引擎的查询。

 组成:

【协议+主机地址+端口号+资源路径+查询参数+锚点】
 方法:
 String getFile()
 获取此 URL的文件名。  
 String getHost()
 获取此 URL的主机名(如适用)。  
 String getPath()
 获取此 URL的路径部分。  
 int getPort()
 获取此 URL的端口号。  
 String getProtocol()
 获取此 URL的协议名称。  
 String getQuery()
 获取此 URL的查询部分。  
 String getRef()
 获取此的锚定(也称为“参考”) URL 。  


 InetAddress

 Internet协议(IP)地址

 方法:

 byte[] getAddress()
 返回此 InetAddress对象的原始IP地址。  
 static InetAddress[] getAllByName(String host)
 给定主机的名称,根据系统上配置的名称服务返回其IP地址数组。  
 static InetAddress getByAddress(byte[] addr)
 给出原始IP地址的 InetAddress对象。  
 static InetAddress getByAddress(String host, byte[] addr)
 根据提供的主机名和IP地址创建InetAddress。  
 static InetAddress getByName(String host)
 确定主机名称的IP地址。  
 String getCanonicalHostName()
 获取此IP地址的完全限定域名。  
 String getHostAddress()
 返回文本显示中的IP地址字符串。  
 String getHostName()
 获取此IP地址的主机名。  
 static InetAddress getLocalHost()
 返回本地主机的地址。
 

 TCP编程


  TCP: 传输控制协议
  特点: 面向连接,有序的,可靠的,以字节流的方式传输数据。
  作用类:
       服务器: ServerScoket
       客户端: Socket


 UDP编程


  UDP: 用户数据报协议
  特点: 面向无连接,不可靠的,无序的,以数据包(DatagramPacket)的方式发生数据。
         传输效率高。

  DatagramSocket:通信类

DatagramPacket:数据报包类。

线程和进程

每个独立执行的程序称为进程。
  线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源,多个线程共享内存,从而极大地提高了程序的运行效率。

  进程与线程的关系
  进程的产生,肯定会产生至少一个以上的线程;
  进程关闭,该进程内的线程会全部销毁;
  线程销毁,进程未必会关闭


  多线程,指的是一个进程内的多个任务并发执行。

  多线程的好处:可以更高效地利用CPU资源,同时,让固定流程的程序更加灵活;

  注意:多个线程之间,谁先抢占到资源,谁就先执行。

多线程实现

   1.继承Thread类
   2.实现Runnable接口
   3.实现Callable接口
   4.线程池

 Runnable和Callable的区别:

(1)Callable规定的方法是call(),Runnable规定的方法是run().
(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
(3)call方法可以抛出异常,run方法不可以,因为run方法本身没有抛出异常,所以自定义的线程类在重写run的时候也无法抛出异常
(4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

多线程生命周期

创建-->就绪-->执行-->阻塞-->死亡

线程常用方法

static Thread currentThread() :返回对当前正在执行的线程对象的引用。

String getName() :返回此线程的名称。

void setName(String name) :将此线程的名称更改为等于参数 name 。 

long getId() :返回此线程的标识符。

int getPriority() :返回此线程的优先级。

void join() :等待这个线程死亡。

static void sleep(long millis):使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。

static void yield() 对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。  (线程礼让)

死锁

概念:当进程正在争抢资源时,每个进程都在等待另一个进程释放它所需的资源,导致所有进程

无法前进。

死锁产生的条件:

  1. 互斥条件(Mutual Exclusion): 一个资源每次只能被一个进程或线程使用。如果一个进程已经获得了某个资源,其他进程必须等待。

  2. 占有并等待条件(Hold and Wait): 进程至少占有一个资源并且在等待获取其他进程占有的资源。

  3. 非抢占条件(No Preemption): 已经分配给一个进程的资源不能被抢占,只能在进程使用完之后自行释放。

  4. 循环等待条件(Circular Wait): 存在一个进程的资源等待链,其中最后一个进程在等待第一个进程释放资源。

 如下代码,线程1获得锁然后进行了休眠,在休眠过程中并没有释放资源,而线程2又在请求资源

在这个过程中就发生了互斥死锁

public class Deadlock {

    private static Object lock1 = new Object();
    private static Object lock2 = new Object();

    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            synchronized (lock1) {
                System.out.println("Thread 1: 获得了锁 1");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock2) {
                    System.out.println("Thread 1: 获得了锁 2");
                }
            }
        });

        Thread t2 = new Thread(() -> {
            synchronized (lock2) {
                System.out.println("Thread 2: 获得了锁 2");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock1) {
                    System.out.println("Thread 2: 获得了锁 1");
                }
            }
        });

        t1.start();
        t2.start();
    }
}


 
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值