Setsuna - Java
type: channel
link: https://www.kok-s0s.top/index.php/tag/Java/
items: Network Programming
items: Multithreaded programming
items: 与Java相关的问题

Network Programming
type: item
date: 2021-03-30T15:59:00+08:00
description: 网络编程 什么是计算机网络 eg:信封 写信 讲述包的概念（对方的信息，地址；自己的地址） eg: 打电话 --连接-- 接了 --通话 TCP 发短信 --发送了就完事了 --接受 UDP 计算机网络 计算机网络（英语：computer network），通常也简称网络，是指容许节点分享资源的数字电信网络[1]:1-3。在电脑网络，电脑设备会透过节点之间的连接（数据链路）互相交换数据。传输介质可分为有线及无线两类——有线的可用到双绞线、光纤电缆等介质[1]:1-4；无线则可用到Wi-Fi、NFC[2]:4-32。 网络编程的目的 无线电台 传播交流信息 数据交换 通信 要达到效果所需的 如何准确定位网络上的一台主机 eg：192.168.16.124 : 端口 ，定位到这个计算机上的某个资源 找到这个主机，如何传输数据？ 传输介质 javaweb：网页编程 网络编程：TCP/IP C/S 网络通信的两个要素 如何实现网络的通信？ 通信双方的地址： ip 端口号 eg：192.168.16.124：5900 规则：网络通信的协议 TCP/IP 参考模型 网络编程中两个主要的问题 如何准确定位到网络上的一台或者多台主机 找到主机之后如何进行通信 网络编程的要素 IP 和 端口号 ip 网络通信协议 udp，tcp 万物皆对象 ---Java IP地址 IP地址：InetAddress 唯一定位一台网络上计算机 127.0.0.1 ： 本机localhost ip地址的分类 IPv4/IPv6 IPv4 127.0.0.1 4个字节组成。 0~255，42亿个；30亿都在北美，亚洲4亿；2011年用尽IPv4 IPv6 fe80::d06b:cf88:8c85:7e09%9 128位；8个无符号整数！ eg: 2001:0bb2:aaaa:0015:0000:0000:1aaa:1321 公网（互联网） 私网（局域网） ABCD类地址 192.168.xxx.xxx 专门给组织内部使用的 域名：IP地址不容易记忆，用域名更方便 eg：我的blog域名为 www.kok-s0s.top package lesson01; import java.net.InetAddress; import java.net.UnknownHostException; //测试ip public class TestInetAddress { public static void main(String[] args) { try { //查询本机地址 InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1"); System.out.println(inetAddress1); InetAddress inetAddress3 = InetAddress.getByName("localhost"); System.out.println(inetAddress1); InetAddress inetAddress4 = InetAddress.getLocalHost(); System.out.println(inetAddress1); //查询我的blog地址 InetAddress inetAddress2 = InetAddress.getByName("www.kok-s0s.top"); System.out.println(inetAddress2); //常用方法 System.out.println(inetAddress2.getAddress()); System.out.println(inetAddress2.getCanonicalHostName()); System.out.println(inetAddress2.getHostAddress()); System.out.println(inetAddress2.getHostName()); } catch (UnknownHostException e) { e.printStackTrace(); } } } 端口Port 端口表示计算机上的一个程序的进程： 不同的进程有不同的端口号！用来区分软件！ 规定范围 0~65535 * 2 可以 TCP:80 UDP:80 同时存在，但单个协议下，端口号不能冲突 端口分类 公有端口 0~1023 HTTP : 80 HTTPS : 443 FTP : 21 Telent : 23 程序注册端口：1024~49151，分配给用户或者程序 Tomcat : 8080 MySQL : 3306 Oracle : 1521 动态，私有：49152~655…

Multithreaded programming
type: item
date: 2021-03-23T15:45:00+08:00
description: ⭐Important 学习渠道_遇见狂神说B站视频 线程基本概念 线程 进程 多线程 多线程 多个同时在运行的任务 一个进程可以有多个线程，如视频中同时听声音，看图像，看弹幕，等等 Process与Thread 程序，是指令和数据的有序集合，其本身没有任何运行的含义，是一个静态的概念。 进程则是执行程序的一次执行过程，它是一个动态的概念。是系统资源分配的单位。 通常一个进程中可以包含若干个线程，当然一个进程中至少有一个线程，不然没有存在的意义。线程是CPU调度和执行的单位。 Tips：很多多线程是模拟出来的，真正的多线程是指有多个CPU，即多核，如服务器。如果是模拟出来的多线程，即在一个CPU的情况下，在同一个时间点，CPU只能执行一个代码，因为切换的很快，所以就有同时执行的错觉。 概念 线程就是独立的执行路径； 在程序运行时，即使没有自己创建线程，后台也会有很多个线程，如主线程，gc线程； main()称之为主线程，为系统的入口，用于执行整个程序； 在一个进程中，如果开辟了多个线程，线程的运行由调度器安排调度，调度器是与操作系统紧密相关的，先后顺序是不能人为干预的； 对同一份资源操作时，会存在资源抢夺的问题，需要加入并发控制； 线程会带来额外的开销，如CPU调度时间，并发控制开销； 每个线程在自己的工作内存交互，内存控制不当会造成数据不一致； 继承Thread类 Thread细节看Java SE 8帮助文档 package demo01; //创建线程方式一：继承Thread类，重写run()方法，调用start开启线程 //总结：注意，线程开启不一定立即执行，由CPU调度执行 public class TestThread extends Thread { @Override public void run() { //run方法线程体 for (int i = 0; i < 200; i++) { System.out.println("I'm watching you!" + i); } } public static void main(String[] args) { //main线程，主线程 //创建一个线程对象 TestThread testThread1 = new TestThread(); //调用start()方法开启线程 testThread1.start(); for (int i = 0; i < 1000; i++) { System.out.println("I'm learning!" + i); } } } 网图下载 package demo01; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; //练习Thread，实现多线程同步下载图片 public class TestThread2 extends Thread { private String url; //网络图片地址 private String name; //保存的文件名 public TestThread2(String url, String name) { this.url = url; this.name = name; } @Override public void run() { WebDownloader webDownloader = new WebDownloader(); webDownloader.downloader(url, name); System.out.println("下载了文件名为：" + name); } public static void main(String[] args) { TestThread2 t1 = new TestThread2("https://www.kok-s0s.top/usr/uploads/2021/03/750247936.jpg", "1.jpg"); TestThread2 t2 = new TestThread2("https://www.kok-s0s.top/usr/uploads/2021/03/1165126803.jpg", "2.jpg"); TestThread2 t3 = new TestThread2("https://www.kok-s0s.top/usr/uploads/2021/03/564529999.jpg", "3.jpg"); //线程并不一定立即执行，由CPU进行调度 t1.start(); t2.start(); t3.start(); …

与Java相关的问题
type: item
date: 2021-03-09T10:07:00+08:00
description: 卸载JDK 1.删除java的安装目录 2.清除变量设置里的JAVA_HOME 3.清除path与java相关的信息 4.试试java -version判断是否是否删除干净。 IDE 1.psvm自动生成主函数语句 2.sout快捷键自动生成输出语句 3.ctrl+alt+L能够做自动排版工作 4.Ctrl + D 复制当前行到下一行 intellij java 反编译 打开intellij的project struck选项,找到字节码文件的位置，将相应的文件拖到存放对应class文件的地方，再用intellij打开其文件，IDEA会自动反编译文件出来。 原文件 package struct; public class switchDemo { public static void main(String[] args) { String name = "kok-s0s"; //JDK7的新特性，表达式结果可以是字符串！！！ //字符的本质是数字 //反编译 java---class（字节码文件）---反编译（IDEA） switch (name) { case "kok-s0s": System.out.println("ok!"); break; case "who": System.out.println("who are you?"); break; default: System.out.println("what are you going to do?"); } } } 反编译结果 // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package struct; public class switchDemo { public switchDemo() { } public static void main(String[] args) { String name = "kok-s0s"; byte var3 = -1; switch(name.hashCode()) { case -543248720: if (name.equals("kok-s0s")) { var3 = 0; } break; case 117694: if (name.equals("who")) { var3 = 1; } } switch(var3) { case 0: System.out.println("ok!"); break; case 1: System.out.println("who are you?"); break; default: System.out.println("what are you going to do?"); } } }