Synchronized

1、多线程编程模版上

(1)线程 操作 资源类

(2)高内聚低耦合

2、实现步骤

(1)创建资源类

(2)资源类里创建同步方法,同步代码块

3、例子:卖票

LOCK 接口

锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。

1、Lock接口的实现   ReentrantLock可重入锁

(1)如何使用?

class X {
   private final ReentrantLock lock = new ReentrantLock();
   // ...
   public void m() {
     lock.lock();  // block until condition holds
     try {
       // ... method body
     } finally {
       lock.unlock()
     }
   }
 }

2、创建线程方式

(1)继承Thread

public  class SaleTicket extends Thread

java是 单继承,资源宝贵,要用接口方式

(2)new Thread()

Thread  t1  =  new  Thread();
t1 .start();

(3)Thread(Runnable target, String name) 「最好使用第三种」

3、实现Runnable方法

(1)新建类实现runnable接口

class   MyThread   implements   Runnable //新建类实现runnable接口 
 
new  Thread( new   MyThread ,...)

这种方法会新增类,有更新更好的方法

(2)匿名内部类

new  Thread(
  new Runnable() {
  @Override
   public void run() {
  }
}, "your thread name" ).start(); 这种方法不需要创建新的类,可以new接口   

(3)lambda表达式

new  Thread(() -> {
 
 },  "your thread name" ).start();
 
  这种方法代码更简洁精炼
package com.atguigu.thread;
 
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
 
class Ticket //实例例eld +method
{
 private int number=30;
/* //1同步 public synchronized void sale() 
 {//2同步  synchronized(this) {}
  if(number > 0) {
    System.out.println(Thread.currentThread().getName()+"卖出"+(number--)+"\t 还剩number);
   }
 }*/
 
// Lock implementations provide more extensive locking operations
// than can be obtained using synchronized methods and statements. 
 private Lock lock = new ReentrantLock();//List list = new ArrayList()
 
 public void sale() 
 {
   lock.lock();
   
   try {
    if(number > 0) {
     System.out.println(Thread.currentThread().getName()+"卖出"+(number--)+"\t 还剩number);
    }
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    lock.unlock();
   }
   
 }
 
}
 
 
/**
 * 
 * @Description:卖票程序个售票出  0张票
 @author xiale
 * 笔记:J里面如何 1 多线程编-上
    1.1 线程  (资里源类 *   1.2 高内聚 /
public class SaleTicket 
{
 public static void main(String[] args)//main所有程序
   Ticket ticket = new Ticket();
   //Thread(Runnable target, String name) Allocates a new Thread object.
   
 
   
 new Thread(() -> {for (int i = 1; i < 40; i++)ticket.sale();}, "AA").start();
 new Thread(() -> {for (int i = 1; i < 40; i++)ticket.sale();}, "BB").start();
 new Thread(() -> {for (int i = 1; i < 40; i++)ticket.sale();}, "CC").start();
 
   
   
   
/*  new Thread(new Runnable() {
    @Override
    public void run() 
    {
     for (int i = 1; i <=40; i++) 
     {
       
       ticket.sale();
     }
    }
   }, "AA").start();
   
   new Thread(new Runnable() {
    @Override
    public void run() 
    {
     for (int i = 1; i <=40; i++) 
     {
       ticket.sale();
     }
    }
   }, "BB").start();
   new Thread(new Runnable() {
    @Override
    public void run() 
    {
     for (int i = 1; i <=40; i++) 
     {
       ticket.sale();
     }
    }
   }, "CC").start();
   */
 }
}
 
//1 class MyThread implements Runnable
 
//2 匿名内部类
 
//3 laExpress
 

最新文章

  1. Windows重启网络命令
  2. Asp.Net MVC中DropDownListFor的用法(转)
  3. Cocos2d 初学基本知识
  4. SqlServer中把结果集放到到临时表的方法
  5. java服务器知识
  6. git研究1
  7. matlab切比雪夫拟合
  8. [转]Delphi 控件属性和事件
  9. 关于C#泛型列表List&lt;T&gt;的基本用法总结
  10. Head first设计模式
  11. 理解LinkedHashMap
  12. GirdView分页
  13. 使用反射+策略模式代替项目中大量的switch case判断
  14. REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR获取客户端IP
  15. Java7 和 Java8 中的 ConcurrentHashMap 原理解析
  16. rs(0)与rs(&quot;字段名&quot;)的区别
  17. C语言的AT指令
  18. MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(六)
  19. Codeforces Round #296 (Div. 1) B. Clique Problem 贪心
  20. [流水账]搜索与web-container版本匹配的jar包

热门文章

  1. 面向对象+闭包+三种对象的声明方式(字面式、new Object、构造函数、工厂模式、原型模式、混合模式)
  2. redis学习三连奏,绝对让你彻底吃透分布式架构精髓
  3. ClrFromCSharp_2_2_生成部署打包应用程序
  4. mysql 表分区操作
  5. 吴裕雄--天生自然HADOOP操作实验学习笔记:分布式及RPC通信简介
  6. Python安装和配置环境变量(简明教程)
  7. grid 布局(2)
  8. Windows下Anaconda安装、换源与更新
  9. 关于GET和POST请求的区别,最通俗全面的回答
  10. Python带你来一次说走就走的环球旅行