应用层
传输层
网络层
数据链路层
把jar导入lib文件夹,点击Add as Library就可以直接使用了
多线程的实现 ,实现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();
线程同步:多个线程操作同一个资源
并发:同一个对象被多个线程同时操作(安全性:队列+锁)
同步方法 在方法前加修饰Synchronize 同步的是它本身this
同步块:Synchronize(Obj){} Obj锁的对象就是变化的量,需要增删改的对象
Lock锁 使用的优先顺序: Lock > 同步代码块 > 同步方法
class A{
private final ReentrantLock lock=new ReentrantLock();
public void m(){
lock.lock();
try {
//保证线程安全的代码;
}finally {
lock.unlock();
//如果同步代码有异常,需要将unlock()写入finally语句块
}
}
}
线程通信 : 管程法(缓冲区) 信号灯法 (flag使用标志位)
线程池: ExecutorService \ Executors
原文:https://www.cnblogs.com/DingGuo/p/14928089.html