Java自学-多线程(1)
2021/8/9 17:06:02
本文主要是介绍Java自学-多线程(1),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java自学-多线程(1)
1、初识并发问题
2、龟兔赛跑
package lesson01; /** * Author: Gu Jiakai * Date: 2021/8/9 9:48 * FileName: Race * Description: */ //模拟龟兔赛跑 public class Race implements Runnable { private static String winner;//胜利者。 @Override public void run() { for (int i = 0; i <= 100; i++) { //模拟兔子是否休息。 if(Thread.currentThread().getName().equals("兔子")&&i%10==0){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } //判断比赛是否结束。 boolean flag=gameOver(i); //如果比赛结束了。 if(flag){ break; } System.out.println(Thread.currentThread().getName()+"-->跑了"+i+"步!"); } } //判断是否完成比赛 private boolean gameOver(int steps){ //判断是否有胜利者。 if(winner!=null){//已经有胜利者。 return true; } if(steps>=100){ winner=Thread.currentThread().getName(); System.out.println("winner is "+winner); return true; } return false; } public static void main(String[] args) { Race race = new Race(); new Thread(race,"兔子").start(); new Thread(race,"乌龟").start(); } }
3、实现Callable接口
4、静态代理模式
package lesson02; /** * Author: Gu Jiakai * Date: 2021/8/9 11:05 * FileName: StaticProxy * Description: */ //静态代理模式总结: //真实对象和代理对象都要实现同一个接口 //代理对象要代理真实角色 // 好处: //代理对象可以做很多真实对象做不了的事情 //真实对象专注做自己的事情 public class StaticProxy { public static void main(String[] args) { Wedding wedding = new Wedding(new You()); wedding.HappyMarry(); } } interface Mary{ void HappyMarry(); } //真实角色,你去结婚 class You implements Mary{ @Override public void HappyMarry() { System.out.println("小明要结婚了,超开心!"); } } //代理角色,帮助你结婚 class Wedding implements Mary{ private Mary target; public Wedding(Mary 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("结婚之后,收尾款!"); } }
5、Lambda表达式
package lesson02; /** * Author: Gu Jiakai * Date: 2021/8/9 11:29 * FileName: TestLambda1 * Description: */ /* * 推导Lambda表达式 * */ public class TestLambda1 { //静态内部类 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(); } class Like implements ILike{ @Override public void lambda() { System.out.println("I like Lambda!"); } }
package lesson02; /** * Author: Gu Jiakai * Date: 2021/8/9 15:30 * FileName: TestLambda2 * Description: */ public class TestLambda2 { public static void main(String[] args) { // Lambda表达式简化。 // Ilove love=(int a)->{System.out.println("I love you-->!"+a);}; // 简化1:去掉参数类型。 // Ilove love=(a)->{System.out.println("I love you-->!"+a);}; // love.love(520); // 简化2:去掉括号。 // Ilove love=a->{System.out.println("I love you-->!"+a);}; // love.love(521); //简化3:去掉花括号 Ilove love=(a,b)->System.out.println("I love you-->!"+a+b);; love.love(521,502); //总结: //lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。 // 前提是接口为函数式接口 //多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号, } } interface Ilove{ void love(int a,int b); }
这篇关于Java自学-多线程(1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27本地多文件上传的简单教程
- 2024-11-27低代码开发:初学者的简单教程
- 2024-11-27如何轻松掌握拖动排序功能
- 2024-11-27JWT入门教程:从零开始理解与实现
- 2024-11-27安能物流 All in TiDB 背后的故事与成果
- 2024-11-27低代码开发入门教程:轻松上手指南
- 2024-11-27如何轻松入门低代码应用开发
- 2024-11-27ESLint开发入门教程:从零开始使用ESLint
- 2024-11-27Npm 发布和配置入门指南
- 2024-11-27低代码应用课程:新手入门指南