zoukankan      html  css  js  c++  java
  • java线程学习(二)

     多个线程并发抢占资源是,就会存在线程并发问题,造成实际资源与预期不符合的情况。这个时候需要设置“资源互斥”。

    1.创建资源,这个地方我创建了一个资源对象threadResource,对象内有一个属性num。

     1 package com.bluej.javaj.thread.first;
     2 
     3 /**
     4  * 使用同步方式-资源互斥
     5  * @author xingdongjie
     6  *
     7  */
     8 public class ThreadResource {
     9     
    10     private  int num=100;
    11     
    12     /**
    13      * 同步方法方式
    14      */
    15     public synchronized  void sell(){
    16         System.out.println(Thread.currentThread().getId());
    17         num--;
    18         System.out.println("---出售一个,剩余"+num+"个资源");
    19     }
    20     
    21     /**
    22      * 同步代码块方式
    23      */
    24     public  void sell2(){
    25         synchronized(this){
    26             System.out.println(Thread.currentThread().getId());
    27             num--;
    28             System.out.println("---出售一个,剩余"+num+"个资源");
    29         }
    30     }
    31 
    32 }
    ThreadResource代码示例

    ThreadResource类内有两个方法,用来实现资源互斥,两种方法机制相同都是使用同步锁,表现形式不同,推荐使用第二种sell2()方法。执行一次sell()方法,num做减一操作。

    2.创建多线程,执行抢占资源,线程获取对象后调用sell()方法。

     1 package com.bluej.javaj.thread.first;
     2 
     3 public class ThreadMethod {
     4 
     5     //使用static、final是为了让线程可以直接拿到对象,无须传参
     6     private static final ThreadResource threadResource= new ThreadResource();
     7     
     8     public static void main(String[] args) {
     9         for (int i = 0; i < 20; i++) {
    10             //使用for遍历创建多个线程,并在线程内执行threadResource.sell()
    11             new Thread(new Runnable() {
    12                 @Override
    13                 public void run() {
    14                     threadResource.sell();
    15                 }
    16             }).start();
    17         }
    18     }
    19 }
    ThreadMethod 线程示例
  • 相关阅读:
    Spring Boot应用程序属性
    Spring Boot Bean和依赖注入
    Spring Boot构建系统
    Spring Boot Tomcat部署
    Spring Boot引导过程
    Spring Boot快速入门
    Spring Boot简介
    eclipse中将项目打包成jar的两种方法,及其问题与解决方法
    配置Zuul代理下游的认证
    WireMock和Spring MVC模拟器
  • 原文地址:https://www.cnblogs.com/bluej/p/6527287.html
Copyright © 2011-2022 走看看