zoukankan      html  css  js  c++  java
  • 网络编程

    网络编程

    TCP/IP四层概念模型

    1. 应用层

    2. 传输层

    3. 网络层

    4. 数据链路层

    IP,端口

    1. IP找到具体地址 PC电脑
    2. 端口定位到电脑上的具体程序
      1. 查看所有端口 netstat -ano
      2. 端口分类:0~1023 公有端口电脑程序自带使用,1024~49151程序注册端口 49152~65535 动态、私有

    多线程

    1. 把jar导入lib文件夹,点击Add as Library就可以直接使用了

    2. 多线程的实现 ,实现Runnable接口,重写Run方法,New Thread去.Start()执行

      public class testThread1 implements Runnable{
          @Override
          public void run() {
              for (int i=0;i<1000;i++){
                  System.out.println("用Runnable接口实现多线程"+i);
              }
          }
          public static void main(String[] args) {
              testThread1 t1=new testThread1();
              new Thread(t1).start();
          }
      }
      

      3.Lambda表达式 (接口为函数试接口可以简化为Lambda表达式,函数式接口:接口只有一个方法)

      public class anonymous {
          public static void main(String[] args) {
              //匿名内部类 (接口NEW接口 大括号里面重写RUN方法)
              Runnable anonymousClass = new Runnable() {
                  @Override
                  public void run() {
                      System.out.println("匿名内部类!");
                  }
              };
              anonymousClass.run();
      
              Runnable lambdas = ()->{
                      System.out.println("Lambda表达式! ");
              };
              //如果Lambda表达式只有一行可以简化为一行,有多行必须用代码块包裹
              lambdas=()->System.out.println("Lambda表达式简化! ");
              //只有一个传值时,可以去掉括号和参数类型lambdas= a->System.out.println("Lambda表达式简化! ");
              //只有多个传值时,参数类型可以全部去掉,或者全部加上,必须加()  (int a,string b)->System.out.println("Lambda表达式简化!");
              lambdas.run();
          }
      }
      

      4.终止线程,使用一个标识位flag终止线程运行(不要使用stop等官方不建议的方法)

      public class threadStop implements Runnable {
          private boolean flag = true;
          int i =0;
          public void run(){
              while (flag){
                      System.out.println("Thread ... Run" + i++);
              }
          }
          public void stop(){//自己写是stop方法,不要用官方JDK中不建议的stop方法
              this.flag=false;
          }
          public static void main(String[] args) {
              threadStop ts=new threadStop();
              new Thread(ts).start();
              for (int i=0; i < 1000; i++) {
                  System.out.println("Thread ... Main" + i);
                  if (i == 666) {
                      ts.stop();
                      System.out.println("Thread 终止 .........." + i);
                  }
              }
          }
      }
      

      5.每个对象都有一把锁,sleep不会释放锁,

      Yield线程礼让,如果A在CPU执行,则A退出CPU,CPU随机让A或B其中一个线程重新调度执行,礼让不一定成功

      Join合并线程,待此线程执行完成后,在执行其他线程,可以想象为插队

      线程分用户线程和守护线程

      用户线程如:Main线程,虚拟机必须确保用户线程执行完毕

      守护线程如:GC回收线程,虚拟机不用等待守护线程执行完毕

      接口NEW接口 大括号里面重写RUN方法(匿名内部类) Runnable anonymousClass = new Runnable() {
                  @Override
                  public void run() {
                      System.out.println("匿名内部类!");
                  }
              };
      接口NEW继承这个接口的Class类,Class类里面重写接口Run方法,NEW的对象点接口里方法实现Class里重写的方法
      Runnable lambdas = ()->{
                      System.out.println("Lambda表达式! ");
              };
      lambdas.run();
      
    3. 线程同步:多个线程操作同一个资源

      并发:同一个对象被多个线程同时操作(安全性:队列+锁)

      同步方法 在方法前加修饰Synchronize 同步的是它本身this

      同步块:Synchronize(Obj){} Obj锁的对象就是变化的量,需要增删改的对象

    4. Lock锁 使用的优先顺序: Lock > 同步代码块 > 同步方法

      class A{
              private final ReentrantLock lock=new ReentrantLock();
          public void m(){
              lock.lock();
              try {
                  //保证线程安全的代码;
              }finally {
                  lock.unlock();
                  //如果同步代码有异常,需要将unlock()写入finally语句块
              }
          }
      }
      
    5. 线程通信 : 管程法(缓冲区) 信号灯法 (flag使用标志位)

      线程池: ExecutorService Executors

  • 相关阅读:
    Detect loop in a singly linked list
    Partition an array around an interger
    Binary search for the first element greater than target
    Searching in a rotated and sorted array
    where, group by, having
    [scalability] Find all documents that contain a list of words
    [DP] 堆盒子问题
    cocos2dx 内存管理的理解
    cocos2dx 2.x版本:简化提炼tolua++绑定自定义类到lua中使用
    OpenGl从零开始之坐标变换(下)
  • 原文地址:https://www.cnblogs.com/DingGuo/p/14928089.html
Copyright © 2011-2022 走看看