亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java多線程實現(xiàn)簡易微信發(fā)紅包的方法實例

 更新時間:2021年01月31日 14:29:10   作者:HENU小菜雞  
這篇文章主要給大家介紹了關(guān)于Java多線程實現(xiàn)簡易微信發(fā)紅包的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

 一、

首先我們先大致了解一下什么是多線程。(書上的解釋)

程序是一段靜態(tài)的代碼,它是應用軟件的藍本。進程是程序的一次動態(tài)執(zhí)行過程,對應了從代碼加載執(zhí)行,執(zhí)行到執(zhí)行完畢的一個完整的過程。

線程不是進程,線程是比進程更小的執(zhí)行單位,一個進程在其執(zhí)行過程中,可以產(chǎn)生多個線程形成多條執(zhí)行線索,每條線索即每個線程也有它自身的產(chǎn)生,存在,消亡的過程,和進程共享操作系統(tǒng)的資源類似,線程間也可以共享進程中的某些內(nèi)存單元,并利用這些共享單元來實現(xiàn)數(shù)據(jù)交換,實時通信與必要的同步操作,但與進程不同的是線程的中斷和恢復更加節(jié)省開支。線程是運行在進程中的“小進程”。

多線程是指一個應用程序中同時存在幾個執(zhí)行體,按幾條不同的執(zhí)行線索共同工作的情況。雖然看似是幾個事件同時發(fā)生,但其實計算機在任何給定時刻只能執(zhí)行那些線程中的一個。為了建立這些線程在同步進行的感覺,Java虛擬機快速的把控制從一個線程切換到另一個線程。這些線程將被輪流執(zhí)行,使得每個線程都有機會使用CPU資源。

二、

利用單線程實現(xiàn)的簡易微信發(fā)紅包

共寫有三種方法,其中第一種,第二種未設置范圍,紅包數(shù)和人數(shù)為一一對應,第三種增添了取值范圍以及計數(shù)器,人多紅包少有未搶到現(xiàn)象發(fā)生。

(1) 方法一

import java.util.Scanner;
import com.sun.deploy.security.SelectableSecurityManager;
import java.util.Random;

public class 簡易微信發(fā)紅包 {
 public static void main(String[] args) {
  Scanner scanner=new Scanner(System.in);
  int n;
  double money;
  System.out.println("請輸入您想要發(fā)的紅包數(shù)量");
  n=scanner.nextInt();
  System.out.println("請輸入您發(fā)送的紅包金額");
  money=scanner.nextDouble();
  T2 t2=new T2(n,money);
  t2.Rob();
 }
}
class T2 {
 public double remain;//有紅包被領(lǐng)取后的余額
 int n;//紅包數(shù)量

 T2(int n,double money) {
  this.remain=money;
  this.n=n;

 }
 int a=1;
 public void Rob() {

  while (n > 0) {
   double x2;

   if (n != 1) {//因為最后一個人領(lǐng)取金額為前面人領(lǐng)取紅包后剩下的,所以無需再進行隨機
    x2 = process();//取隨機金額
    while (judge(x2) != 1) {//判斷取到的隨機金額是否非法,即無法保證后來每個紅包領(lǐng)取者領(lǐng)到最低金額0.01
     x2 = process();//若非法則重新取隨機金額
    }

    remain = remain - x2;//當領(lǐng)取成功后余額減去領(lǐng)走的金額
    n--;//確保每次判斷人數(shù)為所剩紅包數(shù)減1
    System.out.println("紅包獲得者" + a + "獲得" + x2 + "元");//此處默認領(lǐng)取者順序為升序
    a++;//控制輸出順序
   }
   else {
    x2 = remain;//因為最后一個人領(lǐng)取金額為前面人領(lǐng)取紅包后剩下的,所以無需再進行隨機
    String str = String.valueOf(x2);
    String str1 = String.format("%.2f", x2);
    x2 = Double.parseDouble(str1);
    System.out.println("紅包獲得者" + a + "獲得" + x2 + "元");
    n--;//確保每次判斷人數(shù)為所剩紅包數(shù)減1
   }


  }

 }
 public int judge(double x){//判斷函數(shù)
  if(remain-x>(n-1)*0.01){//確保后來紅包領(lǐng)取者最少能領(lǐng)到最低金額0.01
  
   return 1;
  }
  else return 0;
 }

 public double process() {//實現(xiàn)紅包金額隨機的函數(shù)
  double x2;
  double x1;
  String str1;
  Random random = new Random();//隨機數(shù)為取0到1之間的任意double值
  x1 = remain*random.nextDouble();
   str1= String.format("%.2f",x1);//轉(zhuǎn)化成字符串型用字符串型的format進行格式化處理,紅包金額最多取到小數(shù)點后兩位
  x2=Double.parseDouble(str1);//再將字符串型數(shù)據(jù)轉(zhuǎn)換成double型
  while(x2==0){//如果所取金額非法則回爐重造
   x1 = remain*random.nextDouble();
   str1= String.format("%.2f",x1);//轉(zhuǎn)化成字符串型用字符串型的format進行格式化處理,紅包金額最多取到小數(shù)點后兩位
   x2=Double.parseDouble(str1);//再將字符串型數(shù)據(jù)轉(zhuǎn)換成double型
  }
  return x2;


 }
}





程序運行結(jié)果如下

在這里插入圖片描述

(2) 方法二

import java.util.Random;
import java.util.Scanner;

public class 簡易微信發(fā)紅包2 {
 public static void main(String[] args) {
  Scanner scanner=new Scanner(System.in);
  double money=0;//紅包總金額
  int n;//紅包個數(shù)
  System.out.println("請輸入您想要發(fā)的紅包數(shù)量");
  n=scanner.nextInt();
  System.out.println("請輸入您發(fā)送的紅包金額");
  money=scanner.nextDouble();
  if(money/n==0.01){//當所發(fā)金額剛好為每人0.01元時
   T6 t6=new T6(money,n);
   t6.Rob();
  }else{
   T5 t5=new T5(money,n);
   t5.Rob();
  }
 }
}
class T5{
 double remain;

 int n;
 T5(double money,int n){
  this.remain=money;
  this.n=n;
 }
 int a=1;
 public void Rob(){

  double max;//最大可領(lǐng)紅包金額
  double x1;//隨機金額
  double x2;//所得金額

while(n>0) {
 if (n != 1) {//前n-1個紅包領(lǐng)取者領(lǐng)的紅包為隨機金額紅包
  max = remain - (n - 1) * 0.01;//最大可領(lǐng)紅包金額為剩下的人都獲得最小金額0.01
  Random random = new Random();
  x1 = (double) random.nextInt((int) ((max - 0.01) * 100));
  //用nextInt而不用nextDouble的原因是nextDouble無法設置seed
  //上式中max-0.01,下面的x2+0.01即解決了隨機數(shù)取0導致紅包獲得者沒搶到錢的問題
  x1 /= 100.0;
  x2 = x1 + 0.01;
  remain = remain - x2;
  n--;
  System.out.println("紅包獲得者" + a + "獲取金額為:" + String.format("%.2f", x2) + "元");
  a++;
 } else {//最后一人領(lǐng)的紅包為前n-1個人領(lǐng)完后剩下的紅包

  System.out.println("紅包獲得者" + a + "獲取金額為:" + String.format("%.2f", remain) + "元");
  n--;
 }
}

}
 }


class T6 {
 double remain;
 int n;
 T6(double money,int n){
  this.remain=money;
  this.n=n;
 }

 public void Rob(){
  for(int i=1;i<=n;i++){
   System.out.println("紅包獲得者"+i+"獲得了0.01元");


  }
 }
}









程序運行結(jié)果如下:

在這里插入圖片描述
在這里插入圖片描述

(3) 方法三

import java.util.Random;
import java.util.Scanner;

public class 簡易微信發(fā)紅包3 {
  public static void main(String[] args) {
    int p,n;
    double money;
    System.out.println("請輸入您發(fā)送的紅包金額");
    Scanner scanner=new Scanner(System.in);
    money=scanner.nextDouble();
    System.out.println("請輸入您發(fā)送的紅包數(shù)量");
    n=scanner.nextInt();
    System.out.println("請輸入?yún)⑴c搶紅包的人數(shù)");
    p=scanner.nextInt();
    T7 t7=new T7(money,n,p);
    t7.Rob();
  }
}

class T7 {

  double money;
  int n,p;
  int count =0;//計數(shù)器
  double remain;
 T7(double money,int n,int p){
    this.money=money;//總金額
    this.n=n;//紅包數(shù)
   this.p=p;//搶紅包人數(shù)
    this.remain=money;//所剩金額
  }

  public void Rob() {
    for(int i=1;i<=p;i++) {
      double x1, x2, d;
      String s1, s2;

      Random random = new Random();
      d = money / (n - 1);//設置范圍讓每次所得金額不超過總數(shù)的1/(n-1),這樣也就避免了一次取得過大導致后面搶的紅包不能保證每個最少0.01
      x1 = d * random.nextDouble();
      s1 = String.format("%.2f", x1);//轉(zhuǎn)化成字符串型用字符串型的format進行格式化處理,紅包金額最多取到小數(shù)點后兩位
      x1 = Double.parseDouble(s1);//再將字符串型數(shù)據(jù)轉(zhuǎn)換成double型
      while (x1 == 0 || x1 == money / (n - 1)) {
        x1 = d * random.nextDouble();
        s1 = String.format("%.2f", x1);//轉(zhuǎn)化成字符串型用字符串型的format進行格式化處理,紅包金額最多取到小數(shù)點后兩位
        x1 = Double.parseDouble(s1);//再將字符串型數(shù)據(jù)轉(zhuǎn)換成double型
      }
      s2 = String.format("%.2f", remain);//轉(zhuǎn)化成字符串型用字符串型的format進行格式化處理,紅包金額最多取到小數(shù)點后兩位
      remain = Double.parseDouble(s2);//再將字符串型數(shù)據(jù)轉(zhuǎn)換成double型

      if (count < n - 1) {//前n-1個紅包金額為隨機金額
        System.out.println( "紅包搶奪者"+i+ "搶到了" + s1 + "元");
        remain -= x1;
        count++;
      } else if (count == n - 1) {//第n個為前n-1個紅包搶完所剩金額
        System.out.println( "紅包搶奪者"+i+ "搶到了" + s2 + "元");
        count++;
      } else if (count > n - 1) {//紅包被搶完后再來的
        System.out.println( "紅包搶奪者"+i+ "哎呀,手慢了!沒搶到!");
        count++;
      }
    }
  }
}

程序運行結(jié)果如下:

在這里插入圖片描述

三、

利用多線程實現(xiàn)的簡易微信發(fā)紅包

那么如何創(chuàng)建多線程呢?

1.通過繼承thread類創(chuàng)建多線程

JDK中提供了一個線程類Thread,通過繼承Thread類,并重寫Thread類中的run()方法便可實現(xiàn)多線程。

在Thread類中,提供了一個start()方法用于啟動新線程,線程啟動后,系統(tǒng)會自動調(diào)用run()方法,如果子類重寫了該方法便會執(zhí)行子類中的方法。

run()方法中就是寫能夠被線程執(zhí)行的程序。如果直接調(diào)用則相當于普通方法,必須使用start()方法,才能啟動線程,然后再由JVM去調(diào)用該線程的run()方法。

創(chuàng)建并啟動多線程的步驟

①定義Thread類的子類,并重寫該類的run方法,其方法體代表線程需要完成的任務。因此常把run方法稱為線程執(zhí)行體。

②創(chuàng)建Thread子類的實例,即創(chuàng)建線程對象。

③用線程對象的start方法來啟動該線程。

2.通過實現(xiàn)Runnable接口創(chuàng)建多線程

通過繼承Thread類實現(xiàn)了多線程,但是這種方式有一定的局限性。因為Java中只支持單繼承,一個類一旦繼承了某個父類就無法再繼承Thread類。

Thread類提供了另外一個構(gòu)造方法Thread(Runnable target),其中Runnable是一個接口,它只有一個run()方法。

當通過Thread(Runnable target))構(gòu)造方法創(chuàng)建線程對象時,只需為該方法傳遞一個實現(xiàn)了Runnable接口的實例對象,這樣創(chuàng)建的線程將調(diào)用實現(xiàn)了Runnable接口中的run()方法作為運行代碼,而不需要調(diào)用Thread類中的run()方法。

創(chuàng)建并啟動多線程的步驟

①定義Runnable接口的實現(xiàn)類,并重寫該接口的run方法,該run方法的方法體同樣是該線程的線程執(zhí)行體。

②創(chuàng)建Runnable實現(xiàn)類的實例,并以此為實例作為Thread的參數(shù)來創(chuàng)建Thread對象,該Thread對象才是真正的線程對象。

當多個線程使用同一個共享資源時,可以將處理共享資源的代碼放置在一個代碼塊中,使用synchronized關(guān)鍵字來修飾,被稱作同步代碼塊

sychronized(lock){
操作共享資源代碼塊
}

其中:lock是一個鎖對象,它是同步代碼塊的關(guān)鍵。當線程執(zhí)行同步代碼塊時,首先會檢查鎖對象的標志位,默認情況下,標志位為1,此時線程會執(zhí)行同步代碼塊,同時將鎖對象的標志位置為0。當一個新的線程執(zhí)行到這段同步代碼塊時,由于鎖對象的標志位為0,新線程會發(fā)生阻塞,等待當前線程執(zhí)行完同步代碼塊后,鎖對象的標志位被置為1,新線程才能進入同步代碼塊執(zhí)行其中的代碼。循環(huán)往復,直到共享資源被處理完為止。

同步代碼塊可以有效解決線程的安全問題,當把共享資源的操作放在synchronized定義的區(qū)域內(nèi)時,便為這些操作加了同步鎖。

在方法前面同樣可以使用synchronized關(guān)鍵字來修飾,被修飾的方法為同步方法,它能實現(xiàn)和同步代碼塊同樣的功能,具體語法格式如下:

synchronized 返回值類型 方法名 {}

被synchronized修飾的方法在某一時刻只允許一個線程訪問,訪問該方法的其它線程都會發(fā)生阻塞,直到當前線程訪問完畢后,其它線程才有機會執(zhí)行方法。

另外

public final String getName():獲取線程的名稱。

public static Thread currentThread():返回當前正在執(zhí)行的線程對象,這樣就可以獲取任意方法所在的線程名稱。

Thread.currentThread().getName()

現(xiàn)將上面的單線程改成多線程實現(xiàn)

本篇文章多線程的創(chuàng)建以及實現(xiàn)用Runnable接口實現(xiàn)

(1)

import java.util.Scanner;
import com.sun.deploy.security.SelectableSecurityManager;
import java.util.Random;

public class 微信發(fā)紅包多線程 {
  public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    int n;
    double money;
    System.out.println("請輸入您想要發(fā)的紅包數(shù)量");
    n=scanner.nextInt();
    System.out.println("請輸入您發(fā)送的紅包金額");
    money=scanner.nextDouble();
    T3 t3=new T3(n,money);//創(chuàng)建runnable實現(xiàn)類的實例
    for (int j = 1; j <= n; j++) {
      new Thread(t3, "紅包獲得者" + j).start();//以上面創(chuàng)建的實例作為Thread的參數(shù)來創(chuàng)建Thread對象,并為Thread對象指定一個名字,用線程對象的start方法來啟動該線程。
    }
  }
}
class T3 implements Runnable {//實現(xiàn)runnable接口
  public double remain;//有紅包被領(lǐng)取后的余額
  int n;//紅包數(shù)量

  public synchronized void run() {//同步方法,在某一時刻只允許一個線程訪問,防止數(shù)據(jù)錯亂

    Rob();
  }

  T3(int n, double money) {
    this.remain = money;
    this.n = n;

  }

  int a = n;

  public void Rob() {


    double x2;

    if (n != 1) {//因為最后一個人領(lǐng)取金額為前面人領(lǐng)取紅包后剩下的,所以無需再進行隨機
      x2 = process();//取隨機金額
      while (judge(x2) != 1) {//判斷取到的隨機金額是否非法,即是否能保證后來每個紅包領(lǐng)取者領(lǐng)到最低金額0.01
        x2 = process();//若非法則重新取隨機金額
      }
      remain = remain - x2;//當領(lǐng)取成功后余額減去領(lǐng)走的金額
      n--; //確保每次判斷人數(shù)為紅包數(shù)減一

    } else {
      x2 = remain;//因為最后一個人領(lǐng)取金額為前面人領(lǐng)取紅包后剩下的,所以無需再進行隨機
      String str = String.valueOf(x2);
      String str1 = String.format("%.2f", x2);
      x2 = Double.parseDouble(str1);


    }

    Thread th = Thread.currentThread();//返回當前正在執(zhí)行的線程對象
    String th_name = th.getName();//獲取線程的名稱
    System.out.println(th_name + "搶到" + x2 + "元");
  }


  public int judge(double x) {//判斷函數(shù)
    if (remain - x > (n - 1) * 0.01) {//確保后來紅包領(lǐng)取者能領(lǐng)到最低金額0.01

      return 1;
    } else return 0;
  }

  public double process() {//實現(xiàn)紅包金額隨機的函數(shù)
    double x2;
    double x1;
    String str1;
    Random random = new Random();//隨機數(shù)為取0到1之間的任意double值
    x1 = remain * random.nextDouble();
    str1 = String.format("%.2f", x1);//轉(zhuǎn)化成字符串型用字符串型的format進行格式化處理,紅包金額最多取到小數(shù)點后兩位
    x2 = Double.parseDouble(str1);//再將字符串型數(shù)據(jù)轉(zhuǎn)換成double型
    while (x2 == 0) {//如果所取金額非法則回爐重造
      x1 = remain * random.nextDouble();
      str1 = String.format("%.2f", x1);//轉(zhuǎn)化成字符串型用字符串型的format進行格式化處理,紅包金額最多取到小數(shù)點后兩位
      x2 = Double.parseDouble(str1);//再將字符串型數(shù)據(jù)轉(zhuǎn)換成double型
    }
    return x2;
  }
}



程序運行結(jié)果如下:

在這里插入圖片描述

(2)

import java.util.Random;
import java.util.Scanner;

public class 簡易微信發(fā)紅包多線程2 {
  public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    double money=0;//紅包總金額
    int n;//紅包個數(shù)
    System.out.println("請輸入您想要發(fā)的紅包數(shù)量");
    n=scanner.nextInt();
    System.out.println("請輸入您發(fā)送的紅包金額");
    money=scanner.nextDouble();
    if(money/n==0.01){//當所發(fā)金額剛好為每人0.01元時
      T4 t4=new T4(money,n);
      for(int i=1;i<=n;i++) {
        new Thread(t4,"紅包獲得者"+i).start();
      }
    }else{
    T1 t1=new T1(money,n);
      for(int i=1;i<=n;i++) {
        new Thread(t1,"紅包獲得者"+i).start();
      }
  }
  }
}
class T1 implements Runnable{
  double remain;

  int n;
  T1(double money,int n){
    this.remain=money;
    this.n=n;
  }
  @Override
  public synchronized void run() {

    Rob();
  }
  public void Rob(){

    double max;//最大可領(lǐng)紅包金額
    double x1;//隨機金額
    double x2;//所得金額

    if(n!=1) {//前n-1個紅包領(lǐng)取者領(lǐng)的紅包為隨機金額紅包
      max=remain-(n-1)*0.01;//最大可領(lǐng)紅包金額為剩下的人都獲得最小金額0.01
      Random random=new Random();
     x1=(double)random.nextInt((int) ((max-0.01)*100));
     //用nextInt而不用nextDouble的原因是nextDouble無法設置seed
     //上式中max-0.01,下面的x2+0.01即解決了隨機數(shù)取0導致紅包獲得者沒搶到錢的問題
      x1/=100.0;
      x2=x1+0.01;
      remain=remain-x2;
      n=n-1;
      Thread th=Thread.currentThread();//獲取當前線程
      String th_name=th.getName();//獲取線程名字
      System.out.println(th_name+"獲取金額為:"+String.format("%.2f", x2)+"元");
    }
    else {//最后一人領(lǐng)的紅包為前n-1個人領(lǐng)完后剩下的紅包
      Thread th=Thread.currentThread();//獲取當前線程
      String th_name=th.getName();//獲取線程名字
      System.out.println(th_name+"獲取金額為:"+String.format("%.2f", remain)+"元");
    }



  }
}

class T4 implements Runnable{
  double remain;
  int n;
  T4(double money,int n){
    this.remain=money;
    this.n=n;
  }
  public synchronized void run() {
    Rob();
  }
  public void Rob(){
    Thread th=Thread.currentThread();//獲取當前線程
    String th_name=th.getName();//獲取線程名字
    System.out.println(th_name+"獲取金額為:"+String.format("%.2f", remain/n)+"元");
  }
}



程序運行結(jié)果如下:

在這里插入圖片描述
在這里插入圖片描述

(3)

import java.util.Random;
import java.util.Scanner;

public class 簡易微信發(fā)紅包多線程3 {
  public static void main(String[] args) {
    int p,n;
    double money;
    System.out.println("請輸入您發(fā)送的紅包金額");
    Scanner scanner=new Scanner(System.in);
    money=scanner.nextDouble();
    System.out.println("請輸入您發(fā)送的紅包數(shù)量");
    n=scanner.nextInt();
    System.out.println("請輸入?yún)⑴c搶紅包的人數(shù)");
    p=scanner.nextInt();
    HH hh=new HH(money,n);
    for (int i=1;i<=p;i++){
      new Thread(hh,"第"+i+"個人").start();
    }
  }
}

class HH implements Runnable{

  double money;
  int n;
  int count =0;//計數(shù)器
  double remain;
  HH(double money,int n){
    this.money=money;//總金額
    this.n=n;//紅包數(shù)
    this.remain=money;//所剩金額
  }
  @Override
  public synchronized void run() {
    Rob();
  }
  public void Rob(){

    double x1,x2,d;
    String s1,s2;
    Thread th=Thread.currentThread();//獲取當前線程
    String th_name=th.getName();//獲取線程名字
    Random random=new Random();
    d=money/(n-1);//設置范圍讓每次所得金額不超過總數(shù)的1/(n-1),這樣也就避免了一次取得過大導致后面搶的紅包不能保證每個最少0.01
   x1=d*random.nextDouble();
    s1=String.format("%.2f",x1);//轉(zhuǎn)化成字符串型用字符串型的format進行格式化處理,紅包金額最多取到小數(shù)點后兩位
    x1 = Double.parseDouble(s1);//再將字符串型數(shù)據(jù)轉(zhuǎn)換成double型
   while(x1==0||x1==money/(n-1)){
      x1=d*random.nextDouble();
     s1=String.format("%.2f",x1);//轉(zhuǎn)化成字符串型用字符串型的format進行格式化處理,紅包金額最多取到小數(shù)點后兩位
     x1 = Double.parseDouble(s1);//再將字符串型數(shù)據(jù)轉(zhuǎn)換成double型
   }
    s2= String.format("%.2f",remain);//轉(zhuǎn)化成字符串型用字符串型的format進行格式化處理,紅包金額最多取到小數(shù)點后兩位
    remain = Double.parseDouble(s2);//再將字符串型數(shù)據(jù)轉(zhuǎn)換成double型

    if (count<n-1){//前n-1個紅包金額為隨機金額
      System.out.println(th_name+"搶到了"+s1+"元");
      remain-=x1;
      count++;
    }else if (count==n-1){//第n個為前n-1個紅包搶完所剩金額
      System.out.println(th_name+"搶到了"+s2+"元");
      count++;
    }else if (count>n-1){//紅包被搶完后再來的
      System.out.println(th_name+"哎呀,手慢了!沒搶到!");
      count++;
    }
  }

}




程序運行結(jié)果如下:

在這里插入圖片描述

總結(jié)

新手上路,因能力有限,若有不足之處還望大家海涵!

到此這篇關(guān)于Java多線程實現(xiàn)簡易微信發(fā)紅包的文章就介紹到這了,更多相關(guān)Java多線程實現(xiàn)微信發(fā)紅包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot添加License的多種方式

    SpringBoot添加License的多種方式

    License指的是版權(quán)許可證,當我們開發(fā)完系統(tǒng)后,如果不想讓用戶一直白嫖使用,比如說按時間續(xù)費,License的作用就有了。我們可以給系統(tǒng)指定License的有效期,控制系統(tǒng)的可用時間。
    2021-06-06
  • SpringBoot + Mybatis-plus實戰(zhàn)之Mybatis-plus的一級緩存、二級緩存

    SpringBoot + Mybatis-plus實戰(zhàn)之Mybatis-plus的一級緩存、二級緩存

    這篇文章主要介紹了SpringBoot + Mybatis-plus實戰(zhàn)之Mybatis-plus的一級緩存、二級緩存,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • mybatis 解決將數(shù)值0識別成空字符串的問題

    mybatis 解決將數(shù)值0識別成空字符串的問題

    這篇文章主要介紹了mybatis 解決將數(shù)值0識別成空字符串的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java線程池詳細解讀

    Java線程池詳細解讀

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • java設計模式(實戰(zhàn))-責任鏈模式

    java設計模式(實戰(zhàn))-責任鏈模式

    這篇文章主要介紹了java設計模式(實戰(zhàn))-責任鏈模式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java基礎之八大排序算法

    Java基礎之八大排序算法

    這篇文章主要介紹了Java基礎之八大排序算法,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java獲取凌晨時間戳的方法分析

    Java獲取凌晨時間戳的方法分析

    這篇文章主要介紹了Java獲取凌晨時間戳的方法,結(jié)合實例形式對比分析了java時間戳運算的簡單操作技巧,需要的朋友可以參考下
    2018-03-03
  • Java信號量Semaphore原理及代碼實例

    Java信號量Semaphore原理及代碼實例

    這篇文章主要介紹了Java信號量Semaphore原理及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java基礎之內(nèi)部類與代理知識總結(jié)

    Java基礎之內(nèi)部類與代理知識總結(jié)

    今天帶大家復習Java的基礎知識,文中有非常詳細的介紹及圖文示例,對正在學習Java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • 簡單了解java volatile關(guān)鍵字實現(xiàn)的原理

    簡單了解java volatile關(guān)鍵字實現(xiàn)的原理

    這篇文章主要介紹了簡單了解volatile關(guān)鍵字實現(xiàn)的原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08

最新評論