首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,085 阅读
2
类的加载
741 阅读
3
Spring Cloud OAuth2.0
726 阅读
4
SpringBoot自动装配原理
691 阅读
5
集合不安全问题
586 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
Mybatis
Spring
html5
蘇阿細
累计撰写
389
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
页面
统计
关于
搜索到
157
篇与
的结果
2020-11-26
守护线程
守护(Daemon)线程分为用户线程和守护线程虚拟机必须确保用户线程执行完毕虚拟机不用等待守护线程执行完毕例:后台记录操作日志,内存监控,垃圾回收等package com.thread.state; /** * @Author suaxi * @Date 2020/11/26 11:26 * 守护线程 */ public class TestDaemon { public static void main(String[] args) { God god = new God(); You you = new You(); Thread thread = new Thread(god); thread.setDaemon(true); //默认为false表示用户线程,正常的线程都是用户线程 thread.start(); //启动上帝线程 new Thread(you).start(); } } //上帝 class God implements Runnable{ @Override public void run() { while (true){ System.out.println("God bless you!"); } } } //人 class You implements Runnable{ @Override public void run() { for (int i = 0; i < 36500; i++) { System.out.println("还活着!"); } System.out.println("原地去世了!"); } }
2020年11月26日
145 阅读
0 评论
0 点赞
2020-11-26
线程优先级
线程优先级Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度按照优先级来调度执行线程优先级范围:1~10Thread.MIN_PRIORITY = 1Thread.MAX_PRIORITY = 10设置方法注:1、线程优先级应先设置再启动 2、优先级低只意味着获得调度的概率低,并不是优先级低就不会被调用,最终结果由CPU调度决定package com.thread.state; /** * @Author suaxi * @Date 2020/11/26 11:11 * 测试线程优先级 */ public class TestPriority { public static void main(String[] args) { //主线程默认优先级 System.out.println(Thread.currentThread().getName()+"---->"+Thread.currentThread().getPriority()); //设置优先级 Mypeiority mypeiority = new Mypeiority(); Thread t1 = new Thread(mypeiority); Thread t2 = new Thread(mypeiority); Thread t3 = new Thread(mypeiority); Thread t4 = new Thread(mypeiority); Thread t5 = new Thread(mypeiority); //先设置,再启动 t1.start(); t2.setPriority(3); t2.start(); t3.setPriority(Thread.MAX_PRIORITY); //MAX_PRIORITY=10 t3.start(); t4.setPriority(Thread.MIN_PRIORITY); t4.start(); t5.setPriority(7); t5.start(); } } class Mypeiority implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()+"---->"+Thread.currentThread().getPriority()); } }
2020年11月26日
85 阅读
0 评论
0 点赞
2020-11-25
线程礼让
线程礼让Thread.yield();实例:package com.thread.state; /** * @Author suaxi * @Date 2020/11/25 21:31 */ public class TestYield { public static void main(String[] args) { MyYield myYield = new MyYield(); new Thread(myYield,"A").start(); new Thread(myYield,"B").start(); } } class MyYield implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()+"线程开始执行"); Thread.yield(); System.out.println(Thread.currentThread().getName()+"线程执行结束"); } }注:礼让的结果最终由CPU调度决定
2020年11月25日
155 阅读
0 评论
0 点赞
2020-11-25
线程休眠
线程休眠sleep(时间)指当前线程阻塞的毫秒数sleep存在异常InterruptedExceptionsleep时间达到后线程进入就绪状态可以模拟网络延时,倒计时等每一个对象都有一个锁,sleep不会释放锁模拟倒计时实例:package com.thread.state; import java.text.SimpleDateFormat; import java.util.Date; /** * @Author suaxi * @Date 2020/11/25 17:24 */ public class TestSleep2 { public static void main(String[] args){ //tenDown(); //打印当前系统时间 Date date = new Date(System.currentTimeMillis()); while (true){ try { Thread.sleep(1000); System.out.println(new SimpleDateFormat("HH:mm:ss").format(date)); date = new Date(System.currentTimeMillis()); //更新当前系统时间 } catch (InterruptedException e) { e.printStackTrace(); } } } //模拟倒计时 public static void tenDown() throws InterruptedException { int num = 10; while (true){ Thread.sleep(1000); System.out.println(num--); if (num<=0){ break; } } } }
2020年11月25日
84 阅读
0 评论
0 点赞
2020-11-25
线程状态
线程状态
2020年11月25日
44 阅读
0 评论
0 点赞
2020-11-25
多线程
Process(进程):程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念进程是执行程序的一次执行过程,它是一个动态的概念,是系统资源分配的单位一个进程中至少有一个线程,也可以包含若干个线程很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核。如果是模拟出来的多线程,即在单个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换得很快,所以就有同时执行的错觉Thread(线程):线程是独立执行的路径在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程main()称之为主线程,为系统的入口,用于执行整个程序在一个进程中如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,其执行的先后顺序不能人为干预对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制线程会带来额外的开销,如cpu调度时间,并发控制开销等每个线程在自己的工作内存交互,内存控制不当会造成数据不一致普通方法调用和多线程调用run()方法:只有主线程一条执行路径调用start()方法:多条执行路径,主线程和子线程并行交替执行小结1、继承Thread类子类继承Thread类具备多线程能力启动线程:子类对象.start()不建议使用:避免OOP单继承局限性2、实现Runnable接口实现接口Runnable具有多线程能力启动线程:传入目标对象+Thread对象.start()推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用//一份资源 TestThread t = new TestThread(); //多个代理 new Thread(t1,"多线程测试01").start(); new Thread(t1,"多线程测试02").start(); new Thread(t1,"多线程测试03").start();3、实现Callable接口实现Callable接口,需要返回值类型重写call方法,需要抛出异常创建目标对象创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(3); //3为线程池数量提交执行:Future result = ser.submit();获取结果:Boolean rs1 = result.get();关闭服务:ser.shutdownNow();
2020年11月25日
43 阅读
0 评论
0 点赞
2020-11-25
Lambda表达式
Lambda表达式(Jdk1.8之后出现)λ希腊字母,英文名称为Lambda避免匿名内部类定义过多其本质是函数式编程(params) ->expression[表达式] (params) ->statement[语句] (params) ->{statement}例:a->System.out.println("Lambda表达式测试-->"+a);new Thread(()-> System.out.println("Lambda表达式测试")).start();简化步骤实例:定义函数式接口,实现类--->静态内部类--->局部内部类--->匿名内部类(逐步简化)package com.lambda.demo01; /** * @Author suaxi * @Date 2020/11/25 11:21 */ public class TestLambda01 { //3、静态内部类 static class Like2 implements ILike{ @Override public void lambda() { System.out.println("I like lambda2"); } } public static void main(String[] args) { ILike like = new Like(); like.lambda(); like = new Like2(); like.lambda(); //4、局部内部类 class Like3 implements ILike{ @Override public void lambda() { System.out.println("I like lambda3"); } } like = new Like3(); like.lambda(); //5、匿名内部类,没有类的名称,必须借助接口 like = new ILike() { @Override public void lambda() { System.out.println("I like lambda4"); } }; like.lambda(); //6、用lambda简化 like = ()->{ System.out.println("I like lambda5"); }; like.lambda(); } } //1、定义一个函数式接口 interface ILike{ void lambda(); } //2、实现类 class Like implements ILike{ @Override public void lambda() { System.out.println("I like lambda1"); } }Lambda表达式总结:package com.lambda.demo01; /** * @Author suaxi * @Date 2020/11/25 16:24 */ public class TestLambda02 { public static void main(String[] args) { DisLike disLike = null; /*//1、lambda表达式简化 DisLike disLike = (int a) ->{ System.out.println("lambda表达式测试"+a); }; //简化1:参数类型 disLike = (a) ->{ System.out.println("lambda表达式测试"+a); }; //简化2:简化括号 disLike = a -> { System.out.println("lambda表达式测试"+a); }; //简化3:去掉花括号 disLike = a -> System.out.println("lambda表达式测试"+a); disLike.dlike(1);*/ //多个参数时 disLike = (a,b) ->{ System.out.println("lambda表达式测试"+a); System.out.println("lambda表达式测试"+b); }; disLike.dlike(1,2); //总结: //1、lambda表达式只有在一行代码的情况下才能简化为一行,如果有多行,则需用代码块包裹 //2、函数式接口是前提 //3、多个参数也可以去掉参数类型(要去掉就都去掉),有多个参数的时候不能像简化3一样去掉括号, // 单个参数时可以简化括号,多个参数时必须加上括号 } } interface DisLike{ void dlike(int a,int b); }
2020年11月25日
195 阅读
0 评论
0 点赞
2020-11-23
UDP
类似于发短信,不用连接,只需要知道接收端的地址发送消息发送端package com.network.lesson03; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * @Author suaxi * @Date 2020/11/23 11:03 * UDP发送消息,不需要连接服务器 */ public class UpdClientDemo01 { public static void main(String[] args) throws Exception { //1、建立一个socket DatagramSocket datagramSocket = new DatagramSocket(); //2、建立包 String mgs = "故乡的樱花开了!"; InetAddress localhost = InetAddress.getByName("localhost"); int port = 8888; //数据 数据的长度起始 要发送给谁 DatagramPacket datagramPacket = new DatagramPacket(mgs.getBytes(), 0, mgs.length(),localhost,port); //3、发送包 datagramSocket.send(datagramPacket); //4、关闭流 datagramSocket.close(); } } 接收端package com.network.lesson03; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * @Author suaxi * @Date 2020/11/23 11:18 * UDP接收端,还是要等待客户端的连接 */ public class UpdServerDemo01 { public static void main(String[] args) throws Exception { //开放端口 DatagramSocket datagramSocket = new DatagramSocket(8888); //接收数据包 byte[] bytes = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length); datagramSocket.receive(datagramPacket); //阻塞接收 System.out.println(datagramPacket.getAddress().getHostAddress()); //接收地址 System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength())); //数据包消息 //关闭连接 datagramSocket.close(); } } 循环发送消息package com.network.chat; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; /** * @Author suaxi * @Date 2020/11/23 11:34 * 发送消息 */ public class UdpSenderDemo01 { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket = new DatagramSocket(8888); //准备数据,控制台读取输入的数据System.in BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); while (true){ String data = bufferedReader.readLine(); byte[] bytes = data.getBytes(); DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, new InetSocketAddress("localhost", 8889)); datagramSocket.send(packet); if (data.equals("bye")){ break; } } datagramSocket.close(); } } package com.network.chat; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * @Author suaxi * @Date 2020/11/23 11:34 * UDP聊天咨询Demo(循环接收) */ public class UdpReciverDemo01 { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket = new DatagramSocket(8889); while (true){ //准备接收包裹 byte[] bytes = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length); datagramSocket.receive(datagramPacket); //阻塞式接收包裹 byte[] data = datagramPacket.getData(); String reciveData = new String(data, 0, data.length); System.out.println(reciveData); //断开连接 if (reciveData.equals("bye")){ break; } } datagramSocket.close(); } } 在线咨询,两者都是发送方,也都可以是接收方发送端package com.network.chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; /** * @Author suaxi * @Date 2020/11/23 14:37 */ public class TalkSend implements Runnable{ DatagramSocket datagramSocket = null; BufferedReader bufferedReader = null; private int fromPort; private String toIP; private int toPort; public TalkSend(int fromPort, String toIP, int toPort) { this.fromPort = fromPort; this.toIP = toIP; this.toPort = toPort; try { datagramSocket = new DatagramSocket(fromPort); bufferedReader = new BufferedReader(new InputStreamReader(System.in)); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (true){ try { String data = bufferedReader.readLine(); byte[] bytes = data.getBytes(); DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, new InetSocketAddress(this.toIP, this.toPort)); datagramSocket.send(packet); if (data.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } datagramSocket.close(); } } 接收端package com.network.chat; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /** * @Author suaxi * @Date 2020/11/23 14:43 */ public class TalkRecive implements Runnable{ DatagramSocket datagramSocket = null; private int port; private String mgsFrom; public TalkRecive(int port,String mgsFrom) { this.port = port; this.mgsFrom = mgsFrom; try { datagramSocket = new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (true){ try { //准备接收包裹 byte[] bytes = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length); datagramSocket.receive(datagramPacket); //阻塞式接收包裹 byte[] data = datagramPacket.getData(); String reciveData = new String(data, 0, data.length); System.out.println(mgsFrom+":"+reciveData); //断开连接 if (reciveData.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } datagramSocket.close(); } } 具体实现:package com.network.chat; /** * @Author suaxi * @Date 2020/11/23 14:46 */ public class TalkStudent { public static void main(String[] args) { //开启两个线程 new Thread(new TalkSend(7777,"localhost",8888)).start(); new Thread(new TalkRecive(9999,"老师")).start(); } } package com.network.chat; /** * @Author suaxi * @Date 2020/11/23 14:48 */ public class TalkTeacher { public static void main(String[] args) { new Thread(new TalkSend(7778,"localhost",9999)).start(); new Thread(new TalkRecive(8888,"学生")).start(); } }
2020年11月23日
91 阅读
0 评论
0 点赞
1
...
17
18
19
20