最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

多線程(多窗口賣票實(shí)例講解)

 更新時(shí)間:2017年08月07日 08:28:59   投稿:jingxian  
下面小編就為大家?guī)硪黄嗑€程(多窗口賣票實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

實(shí)現(xiàn)多線程的方式:

實(shí)現(xiàn)多線程的方式有多種,這里只列舉兩種常用的,而第一種繼承Thread的方式無法實(shí)現(xiàn)多窗口賣票。

一,繼承Thread方式:

特點(diǎn):多線程多實(shí)例,無法實(shí)現(xiàn)資源的共享。

例子:

package com.demo.study.multithreading;

public class MyThread extends Thread{

 private int i = 10;
 // 可以自行定義鎖,也可以使用實(shí)例的鎖
 Object mutex = new Object();
 public void selltickets(){
 
 synchronized (mutex) {
 
 if(i>0){
  i--;
  //getName()獲取線程的名字
  System.out.println(Thread.currentThread().getName()+" :"+ i);
 }
 }
 }
 
 @Override
 public void run() {
 while(i>0){
  
  selltickets();
 }
 }
}

啟動(dòng)線程:

package com.demo.study.multithreading;

public class Test {

 public static void main(String[] args) {
//繼承Thread方式:多線程多實(shí)例,無法實(shí)現(xiàn)資源的共享
 MyThread myThread1 = new MyThread();
 MyThread myThread2 = new MyThread();
 //給線程命名
 myThread1.setName("線程1");
 myThread2.setName("線程2");
 myThread1.start();
 myThread2.start();
 }
}

運(yùn)行結(jié)果:

二,實(shí)現(xiàn)Runnable方式:

特點(diǎn):多線程單實(shí)例,可實(shí)現(xiàn)資源的共享

例子:實(shí)現(xiàn)多窗口賣票:

package com.demo.study.multithreading;

public class MyThreadImpl implements Runnable {

 private int tickets = 10;

 public void sellTickets() {

 synchronized (MyThreadImpl.class) {
  if (tickets > 0) {

  tickets--;
  System.out.println(Thread.currentThread().getName() + "正在賣票,還剩下" + tickets + "張");
  }
 }
 }

 @Override
 public void run() {

 while (tickets > 0) {
  sellTickets();
  try {
  // 休眠一秒,讓執(zhí)行的效果更明顯
  Thread.sleep(100);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
 }
 }
}

啟動(dòng)線程:

注意:Thread中的start()方法是線程的就緒,而線程的啟動(dòng),需要等待CPU的調(diào)度(也就是所謂的線程搶資源);run()方法的方法體代表了線程需要完成的任務(wù),稱之為線程執(zhí)行體。

void start() 使該線程開始執(zhí)行;Java 虛擬機(jī)調(diào)用該線程的 run 方法。

package com.demo.study.multithreading;

public class Test {

 public static void main(String[] args) {

 //只創(chuàng)建一個(gè)實(shí)例
 MyThreadImpl threadImpl = new MyThreadImpl();
 //將上面創(chuàng)建的唯一實(shí)例放入多個(gè)線程中,Thread類提供了多個(gè)構(gòu)造方法,見下圖(構(gòu)造方法摘要)
 Thread thread1 = new Thread(threadImpl, "窗口1");
 Thread thread2 = new Thread(threadImpl, "窗口2");
 thread1.start();
 thread2.start();
 
 }
}

構(gòu)造方法摘要
Thread()
分配新的 Thread 對(duì)象。
Thread(Runnable target)
分配新的 Thread 對(duì)象。
Thread(Runnable target, String name)
分配新的 Thread 對(duì)象。
Thread(String name)
分配新的 Thread 對(duì)象。
Thread(ThreadGroup group, Runnable target)
分配新的 Thread 對(duì)象。
Thread(ThreadGroup group, Runnable target, String name)
分配新的 Thread 對(duì)象,以便將 target 作為其運(yùn)行對(duì)象,將指定的 name 作為其名稱,并作為 group 所引用的線程組的一員。
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
分配新的 Thread 對(duì)象,以便將 target 作為其運(yùn)行對(duì)象,將指定的 name 作為其名稱,作為 group 所引用的線程組的一員,并具有指定的堆棧大小
Thread(ThreadGroup group, String name)
分配新的 Thread 對(duì)象。

運(yùn)行結(jié)果:

三、同步鎖與資源共享:

CPU可能隨機(jī)的在多個(gè)處于就緒狀態(tài)中的線程中進(jìn)行切換,這時(shí)就可能出現(xiàn)線程的安全問題;線程安全問題,其實(shí)是指多線程環(huán)境下對(duì)共享資源的訪問可能會(huì)引起此共享資源的不一致性,而解決安全問題則需要同步鎖的加入,執(zhí)行synchronized部分代碼的時(shí)候必須需要對(duì)象鎖,而一個(gè)對(duì)象只有一個(gè)鎖,只有執(zhí)行完synchronized里面的代碼后釋放鎖,其他線程才可以獲得鎖,那么就保證了同一時(shí)刻只有一個(gè)線程訪問synchronized里面的代碼。實(shí)現(xiàn)資源共享的關(guān)鍵是,只有一個(gè)實(shí)例,synchronized使用的是同一把鎖,用實(shí)例的鎖或者定義一個(gè)實(shí)例。這就需要使用實(shí)現(xiàn)Runnable接口的方式,實(shí)現(xiàn)多線程,這樣傳入的是一個(gè)實(shí)例。繼承Thread的方式,傳入的是多個(gè)實(shí)例,每個(gè)實(shí)例都有一個(gè)鎖,那就無法實(shí)現(xiàn)控制。

以上這篇多線程(多窗口賣票實(shí)例講解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring實(shí)現(xiàn)文件上傳功能

    Spring實(shí)現(xiàn)文件上傳功能

    本篇文章主要介紹了Spring實(shí)現(xiàn)文件上傳功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Java通過值查找對(duì)應(yīng)的枚舉的實(shí)現(xiàn)

    Java通過值查找對(duì)應(yīng)的枚舉的實(shí)現(xiàn)

    本文主要介紹了Java通過值查找對(duì)應(yīng)的枚舉的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • Java利用Jackson輕松處理JSON序列化與反序列化

    Java利用Jackson輕松處理JSON序列化與反序列化

    Jackson?是?Java?中最流行的?JSON?處理庫(kù)之一,它提供了許多注解來簡(jiǎn)化?JSON?的序列化和反序列化過程。這篇文章將介紹一些?Jackson?常用的注解,以幫助您更輕松地處理?JSON?數(shù)據(jù)
    2023-05-05
  • struts+spring+hibernate三個(gè)框架的整合

    struts+spring+hibernate三個(gè)框架的整合

    這篇文章主要介紹了struts+spring+hibernate三個(gè)框架的整合,需要的朋友可以參考下
    2017-09-09
  • Java實(shí)現(xiàn)簡(jiǎn)單堆棧代碼

    Java實(shí)現(xiàn)簡(jiǎn)單堆棧代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單堆棧代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 很詳細(xì)的Log4j配置步驟

    很詳細(xì)的Log4j配置步驟

    Log4J的配置文件(Configuration File)就是用來設(shè)置記錄器的級(jí)別、存放器和布局的,它可接key=value格式的設(shè)置或xml格式的設(shè)置信息。通過配置,可以創(chuàng)建出Log4J的運(yùn)行環(huán)境。
    2008-11-11
  • Java中的JPA實(shí)體關(guān)系:JPA一對(duì)一,一對(duì)多(多對(duì)一),多對(duì)多

    Java中的JPA實(shí)體關(guān)系:JPA一對(duì)一,一對(duì)多(多對(duì)一),多對(duì)多

    Java Persistence API(JPA)是Java平臺(tái)上的一個(gè)對(duì)象關(guān)系映射(ORM)規(guī)范,用于簡(jiǎn)化數(shù)據(jù)庫(kù)操作,其中實(shí)體關(guān)系的映射是核心內(nèi)容之一,本文將深入淺出地探討JPA中的三種基本實(shí)體關(guān)系類型:一對(duì)一、一對(duì)多、多對(duì)多,揭示常見問題、易錯(cuò)點(diǎn)及其避免策略,希望能幫助大家
    2024-06-06
  • 關(guān)于Intellij IDEA中的Version Control問題

    關(guān)于Intellij IDEA中的Version Control問題

    這篇文章主要介紹了Intellij IDEA中的Version Control問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 基于Java實(shí)現(xiàn)計(jì)數(shù)排序,桶排序和基數(shù)排序

    基于Java實(shí)現(xiàn)計(jì)數(shù)排序,桶排序和基數(shù)排序

    這篇文章主要為大家詳細(xì)介紹了計(jì)數(shù)排序,桶排序和基數(shù)排序的多種語(yǔ)言的實(shí)現(xiàn)(JavaScript、Python、Go語(yǔ)言、Java),感興趣的小伙伴可以了解一下
    2022-12-12
  • SpringCloud服務(wù)網(wǎng)關(guān)Gateway的使用教程詳解

    SpringCloud服務(wù)網(wǎng)關(guān)Gateway的使用教程詳解

    SpringCloud Gateway是Spring體系內(nèi)的一個(gè)全新項(xiàng)目,它旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單有效的統(tǒng)一的API路由管理方式。本文就來為大家詳細(xì)講講Gateway的使用教程,需要的可以參考一下
    2022-09-09

最新評(píng)論

两当县| 崇州市| 大同市| 洪雅县| 伽师县| 佳木斯市| 汉寿县| 南澳县| 方城县| 彭泽县| 元氏县| 嵩明县| 县级市| 新余市| 曲周县| 丹凤县| 新蔡县| 新丰县| 东丽区| 黔江区| 鄂托克前旗| 上饶县| 永年县| 耒阳市| 鹿泉市| 焦作市| 洪洞县| 且末县| 莒南县| 沧源| 桐城市| 岑巩县| 临西县| 天峨县| 女性| 天门市| 乌拉特前旗| 梅河口市| 普定县| 丰台区| 舒兰市|