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 线程示例
  • 相关阅读:
    基本MVVM 和 ICommand用法举例(转)
    WPF C# 命令的运行机制
    628. Maximum Product of Three Numbers
    605. Can Place Flowers
    581. Shortest Unsorted Continuous Subarray
    152. Maximum Product Subarray
    216. Combination Sum III
    448. Find All Numbers Disappeared in an Array
    268. Missing Number
    414. Third Maximum Number
  • 原文地址:https://www.cnblogs.com/bluej/p/6527287.html
Copyright © 2011-2022 走看看