package com.dym.juc;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//资源类
class Ticket
{
private int number =30;
private Lock lock=new ReentrantLock();
public void saleTicket()
{
lock.lock();
try
{
if(number>0)
{
System.out.println(Thread.currentThread().getName()+"\t卖出第:"+(number--)+"\t还剩下:"+number);
}
}finally
{
lock.unlock();
}
}
}
//题目:三个售票员 卖出 30张票
// 多线程编程的企业级套路+模板
// 1 在高内聚 低耦合的前提下, 线程 操作(对外暴露的调用方法) 资源类
public class SaleTicket {
public static void main(String[] args) { // main 一切程序的入口
Ticket ticket=new Ticket();
new Thread(()->{
for (int i = 0; i <=40 ; i++) {
ticket.saleTicket();
}
},"A").start();
new Thread(()->{
for (int i = 0; i <=40 ; i++) {
ticket.saleTicket();
}
},"B").start();
new Thread(()->{
for (int i = 0; i <=40 ; i++) {
ticket.saleTicket();
}
},"C").start();
}
}
package com.dym.juc;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//资源类
class Ticket
{
private int number =30;
private Lock lock=new ReentrantLock();
public void saleTicket()
{
lock.lock();
try
{
if(number>0)
{
System.out.println(Thread.currentThread().getName()+"\t卖出第:"+(number--)+"\t还剩下:"+number);
}
}finally
{
lock.unlock();
}
}
}
//题目:三个售票员 卖出 30张票
// 多线程编程的企业级套路+模板
// 1 在高内聚 低耦合的前提下, 线程 操作(对外暴露的调用方法) 资源类
public class SaleTicket {
public static void main(String[] args) { // main 一切程序的入口
Ticket ticket=new Ticket();
new Thread(()->{ for (int i = 0; i < 40; i++) ticket.saleTicket(); },"A").start();
new Thread(()->{ for (int i = 0; i < 40; i++) ticket.saleTicket(); },"B").start();
new Thread(()->{ for (int i = 0; i < 40; i++) ticket.saleTicket(); },"C").start();
}
}
没有使用lambda表达式的写法
package com.dym.juc;
interface Foo //接口只有方法的声明
{ // 接口也是可以new的
public void sayHello();
}
public class LambdaExpressDemo {
public static void main(String[] args) {
Foo foo=new Foo(){
@Override
public void sayHello() {
System.out.println("******hello java dym");
}
};
foo.sayHello();
}
}
使用lambda表达式
package com.dym.juc;
interface Foo //接口只有方法的声明
{ // 接口也是可以new的
public void sayHello();
}
public class LambdaExpressDemo {
public static void main(String[] args) {
// Foo foo=new Foo(){
// @Override
// public void sayHello() {
// System.out.println("******hello java dym");
// }
// };
// foo.sayHello();
Foo foo=()->{System.out.println("******hello java lambda Express");};
foo.sayHello();
}
}
package com.dym.juc;
interface Foo //接口只有方法的声明
{ // 接口也是可以new的
public int add(int x,int y);
}
// Lambda Express
// 口诀: 拷贝小括号,写死右箭头,落地大括号
public class LambdaExpressDemo {
public static void main(String[] args) {
Foo foo=(int x,int y)->{
System.out.println("******come in here");
return x+y;
};
System.out.println(foo.add(3,5));
}
}
default
package com.dym.juc;
@FunctionalInterface
interface Foo // 接口只有方法的声明
{ // 接口也是可以new的
// 接口里面的方法也可以有实现,在jdk8之后
public int add(int x,int y);
default int div(int x,int y){
System.out.println("******come in here");
return x/y;
}
}
// Lambda Express
// 口诀: 拷贝小括号,写死右箭头,落地大括号
// @FunctionalInterface
// default jdk8之后
public class LambdaExpressDemo {
public static void main(String[] args) {
Foo foo=(int x,int y)->{
System.out.println("******come in here");
return x+y;
};
System.out.println(foo.add(3,5));
System.out.println(foo.div(10,5));
}
}
package com.dym.juc;
@FunctionalInterface
interface Foo // 接口只有方法的声明
{ // 接口也是可以new的
// 接口里面的方法也可以有实现,在jdk8之后
public int add(int x,int y);
default int div(int x,int y){
System.out.println("******come in here");
return x/y;
}
public static int mul(int x,int y){
return x*y;
}
public static int sub(int x,int y){
return x-y;
}
}
// Lambda Express
// 口诀: 拷贝小括号,写死右箭头,落地大括号
// @FunctionalInterface
// default jdk8之后
// 静态方法实现
public class LambdaExpressDemo {
public static void main(String[] args) {
Foo foo=(int x,int y)->{
System.out.println("******come in here");
return x+y;
};
System.out.println(Foo.mul(3,5));
System.out.println(Foo.sub(10,5));
}
}