java复习-8
多线程
process:相当于开着qq音乐和网易云
Thread:qq音乐中既可以听歌又可以倒计时关闭
线程创建
三种创建方式
1.继承Thread类
2.实现Runnable接口
3.实现Callable接口
ps:其中Thread类实现了Runnable
//线程开启不一定立即执行由cpu调度执行
public class TestTHread extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("xainc"+i);
}
}
public static void main(String[] args) {
TestTHread thread=new TestTHread();
thread.start();//开启线程
for (int i = 0; i < 10; i++) {
System.out.println("main"+i);
}
}
}
//实现Runnable,重写run方法,执行线程丢入runable接口实现类调用start
public class Testrunable implements Runnable{
@Override
public void run() {
for (int i = 0; i <10; i++) {
System.out.println("xiancheng"+i);
}
}
public static void main(String[] args) {
Testrunable test=new Testrunable();
Thread thread=new Thread(test);
thread.start();
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
}
public class AddCallable {
public static void main(String[] args) {
long begin = System.currentTimeMillis();
ExecutorService threadPool = Executors.newCachedThreadPool();
AddTask task01 = new AddTask("Task-01", 1, 50);
AddTask task02 = new AddTask("Task-02", 51, 100);
//得到的结果集
Future<Long> resultSet01 = threadPool.submit(task01);
Future<Long> resultSet02 = threadPool.submit(task02);
try {
System.out.println("最后的结果是:"+(resultSet01.get()+resultSet02.get()));
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
finally{
threadPool.shutdown();
}
System.out.println(System.currentTimeMillis() - begin);
}
};
/**
* @author:xxx
* @TODO:泛型中的Long表示返回的类型
*/
class AddTask implements Callable<Long> {
private String name;
private long begin;
private long end;
public AddTask(String name, long begin, long end) {
this.name = name;
this.begin = begin;
this.end = end;
}
@Override
public Long call() throws Exception {
System.out.println(Thread.currentThread().getName());
System.out.println(name + " 执行中.......");
long sum = 0;
for (long i = begin; i <= end; i++) {
sum += i;
System.out.println(name+" "+i);
}
return sum;
}
};
静态代理模式(狂神说)
- 抽象角色 : 一般使用接口或者抽象类来实现
- 真实角色 : 被代理的角色
- 代理角色 : 代理真实角色 ; 代理真实角色后 , 一般会做一些附属的操作 .
- 客户 : 使用代理角色来进行一些操作 .
1.Rent.java
2.Host.java
3.Client.java
4.Proxy.java
Lamda表达式
函数式接口:一个接口只包含一个方法
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
public class TestLambda {
//3静态内部类
static class Like2 implements Ilike{
@Override
public void lambda() {
System.out.println("i like2");
}
}
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 like3");
}
}
like=new Like3();
like.lambda();
//5匿名内部类,没有类的名称,借助接口或父类
like=new Ilike() {
@Override
public void lambda() {
System.out.println("i like4");
}
};
like.lambda();
//6.lambda简化
like=()->{
System.out.println("i like5");
};
like.lambda();
}
}
//1定义一个函数式接口
interface Ilike{
void lambda();
}
//2实现类
class Like implements Ilike{
@Override
public void lambda() {
System.out.println("i like1");
}
}
结果
i like1
i like2
i like3
i like4
i like5
public class TestLambda1 {
public static void main(String[] args) {
Ilove love=(int a)->{
System.out.println("i love"+a);
};
//简化
love=(a)->{
System.out.println("i love"+a);
};
love= a->{
System.out.println("i love"+a);
};
love.love(521);
}
interface Ilove{
void love(int a);
}
}
线程状态
sleep
join
合并线程,等待此线程执行完之后其他线程才执行
public class TestJoin implements Runnable {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("xainc vip "+i);
}
}
public static void main(String[] args) throws InterruptedException {
TestJoin test=new TestJoin();
Thread thread=new Thread(test);
thread.start();
for (int i = 0; i <1000; i++) {
if (i==200) {
thread.join();
}
System.out.println(i);
}
}
}
);
}
}
public static void main(String[] args) throws InterruptedException {
TestJoin test=new TestJoin();
Thread thread=new Thread(test);
thread.start();
for (int i = 0; i <1000; i++) {
if (i==200) {
thread.join();
}
System.out.println(i);
}
}
}