线程池
线程池概述
为什么会出现线程池的概念?
其实现场呢个执行任务的阶段分为四个步骤:
1.创建线程
2.创建任务
3.执行任务
4.结束线程
而,在这四个步骤中,真正起作用的是中间的两个,但是他们所消耗的时间却只占了总时间的5%,
所以有大量的时间被创建线程和结束线程占用了,当线程的数量增多时,这样的无用时间浪费只会降低程序的性能
所以就有了线程池的概念。
什么是线程池?
顾名思义,就是线程的池子,装线程的容器。线程池里面有很多的线程,等待这被调用,而且被调用完之后,这些线程又会变成空闲的状态,
等待着下一次的调用。所以当使用线程池的时候,通常程序不会立马结束(线程在等待着再次调用),要等一会才会结束。
有哪些线程池呢?
线程池分为四类:
定长线程池、缓存线程池(又叫不定长线程池)、单线程线程池、周期性定长线程池。
=================================================================
下面就让我来一一介绍各类线程池的创建和使用方法吧!
定长线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Demo1 {
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(2);
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
});
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
});
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() +"锄禾日当午");
}
});
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
});
}
}
缓存线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Demo {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
service.execute(new Runnable(){
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
} );
service.execute(new Runnable(){
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
} );
service.execute(new Runnable(){
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
} );
service.execute(new Runnable(){
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
} );
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
service.execute(new Runnable(){
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
} );
service.execute(new Runnable(){
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
} );
}
}
单线程线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Demo2 {
public static void main(String[] args) {
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
});
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
});
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "锄禾日当午");
}
});
}
}
周期性定长线程池
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Demo3 {
public static void main(String[] args) {
ScheduledExecutorService service = Executors.newScheduledThreadPool(2);
service.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("锄禾日当午,汗滴禾下土");
}
},3,3,TimeUnit.SECONDS);
}
}
Lambda表达式
public class Demo4 {
public static void main(String[] args) {
new Thread(() -> System.out.println("床前明月光")).start();
}
}
网络编程概述
网络编程
什么是计算机网络?
分布在不同区域的计算机,通过硬件等网络设备使用通信线路连接形成一个网格系统。
什么是IP地址?域名?
IP是计算机在网络中的唯一标识,就像人在社会上的身份证号码一样;
本机IP:
127.0.0.1;
localhost。
域名:
简而言之就是IP地址的别名,更方便记忆,当访问域名(例如:www.baidu.com)时,计算机会先访问域名解析商,获得IP,再进行访问。
什么是端口号?
端口号的范围是0~65535之间
和IP一样,IP地址是计算机在网络中的唯一标识;
端口号是计算机上的程序的唯一标识,用来区分不同应用程序的。
端口号在使用的时候应当尽量避免1-1024之间,应为已经被知名软件和Windows的操作系统所占用。
什么是计算机之间的通信协议?
通信协议就是计算机之间交流的标准。是对信息传递速度、出错控制、传入接口、步骤控制的一系列标准。
常用的通信协议:http协议:超文本传输协议,80端口号
https协议:安全的超文本传输协议,443端口号
ftp协议:文件传输协议,21端口号
TCP协议:传输控制协议
UDP协议:数据报协议
网络编程的分类:
b/s:浏览器服务端协议
c/s:客户端服务端协议
TCP协议-OSI网络模型
指的是从一台计算机的软件中将数据传输到另一台计算机的软件中的过程。
七层网络模型:应用层/表现层/会话层/传输层/网络层/数据链接层/物理层
三次握手和四次挥手:tcp协议在操作客户端和服务端的时候,存在三次握手,确保数据的准确无误的传输,
在断开连接的时候存在四次挥手的操作。