2021-7-22

实现Callable接口

  • 要实现callable接口的话,需要返回值类型

  • 重写call方法,在这个时候呢还要抛出异常

  • 创建目标对象

  • 创建执行的服务 ExcutorServer ser=Executors.newFixedThreadPool(1)

  • 提交执行 Furtureresult1=ser.submit(t1);

  • 获取结果 Boolean r1=result .get();

  • 关闭服务:ser.shutdownNow();

代理模式

创建一个接口

interface Marry{
    void HappyMarry();
}

创建一个实现类

class You implements  Marry{
    @Override
    public void HappyMarry() {
        System.out.println("MarryHappy");
    }
}

静态代理

  • 真实对象和代理对象都要实现同一个接口

  • 代理对象要代理真实角色

  • 代理对象可以处理真实对象处理不了的事

  • 真实对象专注于自己的事情

创建代理类

class WeddingCompany  implements Marry{
    private Marry target;

    public WeddingCompany(Marry target) {
        this.target= target;
    }

    @Override
    public void HappyMarry() {
        before();
        this.target.HappyMarry();
        after();
    }
    private void before(){
        System.out.println("前");
    }
    private void after(){
        System.out.println("后");
    }
}

调用

public class test2{   
    public static void main(String[] args) {      
        WeddingCompany weddingCompany=new WeddingCompany(new You());        weddingCompany.HappyMarry();    }}

Lambda表达式

作用

  • 可以避免就是内部定义的类过多

  • 可以让代码看起来整简洁把。(刚学的时候可能会觉得更乱)

  • 留下核心代码

函数式接口

  • 接口中,只包含一个抽象方法就是函数式接口:

    public interface Runnable{	public abstract void run();}
    

    以上就只有一个抽象方法 run()一定要有

  • /** * 1定义接口 */
    interface Ilike{    void lamda();}
    
  • //lambda简化       
    like=()->{  System.out.println("yes");        };        
    like.lamda();    }
    

线程状态

  • Thread t=new Thread()线程对象一旦创建就进入到了新生状态**(new)**
  • 调用start()方法,线程;立即进入就绪状态,但不意味着立即调度执行
  • 进入运行状态,线程才真正执行线程体的代码块
  • 堵塞状态,当调用sleep,wait或同步锁定时,线程进入堵塞状态,代码不往下执行,堵塞时间解除后,重新进入就绪状态,等待cpu调度执行。
  • dead,死亡状态,线程中断或者结束,一旦进入死亡状态,就不能再再次启动。。

可以输出线程状态


Thread.start();

state=thread.getState();

system.out.println(state);

线程方法

setPriority (int newPriority)
//更改线程的优先级
static void sleep(long millis)
//指定毫秒数内让当前执行的线程休眠
void join()
//等待该线程终止
static void yield()
//暂停当前正在执行得线程对象,并执行其他线程
void interrupt()
//中断线程(一般还是不要用)
boolean isAlive()
//判断线程是否处于活动状态

停止线程的话要让程序自己停止下来才好,可以使用一个标志进行终止变量,当flag=false,则终止线程运行

格式

public  class TestStop implements Runnable{
    //1.线程中定义线程体使用得标识
	private Boolean flag=true;
	
	@override
	public void run(){
	//2.线程体使用该标识
	}
	
	//3.对外提供方法改变标识
	public void stop(){
	     this.flag=false;
	}
}

线程休眠sleep

进入休眠的状态,让其他的线程来执行。

  • 模拟倒计时
public class Sleep{

	 public static void main(String[] args) {
	 	tenDown();
	 }
	 
	public void tenDown() throws InterruptedException{
		int num=10;
		while(true){
		thread.sleep(1000);
		system.out.printfln(num--);
		if(num<=0) break;
        }
	}
}

每一秒钟跑一次

  • sleep和wait的区别

每一个对象都有一个锁,sleep不会释放锁

sleepwait
同步只能在上下文中调用该wait,要抛出异常不需要同步啦
作用对象Object类Thread中,作用与当前线程
释放锁对资源
唤醒条件其他线程调用对象notify()或者notifiyAll()超时或者调用interrupt方法体
方法属性实例方法静态方法

线程礼让yield

有A和B,A礼让B,自己的线程停止运行,然后再由cou重新调度,可能礼让不会成功都得看cpu的心情

Thread.yield();//礼让

线程强制执行join

合并线程,待此线程执行完成之后,在执行其他线程,其他线程堵塞,,,,,,可以想象成食堂吃饭插队

Thread.join();//很霸道的方法

线程优先级

  • 用数字表示

    ​ Thread.MIN_PRIORITY=1;

    ​ Thread.MAX_PRIORITY=10;

    ​ Thread.NORM_PRIORITY=5;

  • 改变获取优先级

    gerPriority().setPriority(int xxx)

最后感觉自己学习并不扎实,学了又忘还没有完全学会用自己的方法去理解。。还是要坚持下去,好好学好好扎实的学,放进代码巩固实践,最近经常和我说”学习如逆水行舟,不进则退“。希望我自己能体会懂得。也很感谢实验室的伙伴对我们的监督!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值