1. 程式人生 > >實現Runnable,輕鬆實現多執行緒間的資源共享

實現Runnable,輕鬆實現多執行緒間的資源共享

public class Test {

    class TestRunnable implements Runnable {

        private String TName="TName";
        private Object obj=new Object();
        private int a=5;
        public void run() {

            synchronized (obj) {

                a--;
                if (a <= 0) {
                    System.out
.println(TName + " notifyALL:" + a); obj.notifyAll(); } else { System.out.println(TName + " wait:" + a); try { obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } System.out
.println(TName + " relese :" + a); } } public static void main (String[] args){ System.out.println("hello word"); Test t=new Test(); Runnable run_a=t.new TestRunnable(); for(int i=0; i<5;i++){ new Thread(run_a).start(); } } }
// wait是讓使用wait方法的物件等待,暫時先把物件鎖給讓出來,給其它持有該鎖的物件用,其它物件用完後再告知(notify)等待的那個物件可以繼續執//  行了,整個過程就是這樣

相關推薦

實現Runnable輕鬆實現執行資源共享

public class Test { class TestRunnable implements Runnable { private String TName="TName"; private Object obj=new O

Java設計模式(二):單例模式的5種實現方式以及在執行環境下5種建立單例模式的效率

這段時間從頭溫習設計模式。記載下來,以便自己複習,也分享給大家。 package com.iter.devbox.singleton; /** * 餓漢式 * @author Shearer * */ public class SingletonDemo1 {

linux下一個程序中執行資源共享

在說執行緒資源共享之前,我們先來說來說一下執行緒的概念,執行緒是程序內部的一條執行序列(即執行流),一個程序至少有一個執行緒,即main函式代表的執行流。當然我們也可以通過執行緒庫來建立新的執行緒,這種執行緒我們稱之為函式執行緒,同一個程序中的所有普執行緒是併發執行的。而這些

c#實現用SQL池(執行定時批量執行SQL語句 (轉)

在實際專案開發中,業務邏輯層的處理速度往往很快,特別是在開發Socket通訊服務的時候,網路傳輸很快,但是一旦加上資料庫操作,效能一落千丈,資料庫操作的效率往往成為一個系統整體效能的瓶頸。面對這問題,我們怎麼辦呢?好,下面我就為大家介紹一種方法:構建SQL池,分離業務邏輯層

JAVA執行實現的三種方式(繼承Thread類、實現Runnable介面、使用ExecutorService、Callable、Future實現有返回結果的執行)

JAVA多執行緒實現方式 JAVA多執行緒實現方式主要有三種:繼承Thread類、實現Runnable介面、使用ExecutorService、Callable、Future實現有返回結果的多執行緒。其中前兩種方式執行緒執行完後都沒有返回值,只有最後一種是帶返回值的。

高併發的實現(非同步化+快取+執行

一年前,本人有幸負責公司核心專案的優化。隨著公司業務的增長,專案處理量也越來越大。 一次818大促甚至導致一臺伺服器滿負荷運作。於是,高併發改造被提上行程。 乾貨開始: 技術實現上有三個重點:非同步化(一般使用mq)、快取(一般使用redis)、多執行緒 一個功能併發量上大的提升,是需要業務

安卓執行通訊和程序之間通訊有什麼不同?分別怎麼實現?

**當一個程式第一次啟動的時候,Android會去動一個Linux進行和一個主執行緒,預設情況下,所有改程式元件都將在該程序和執行緒中 執行,同時Android會為每個應用程式分配一個單獨的Linux使用者,Android會盡量保留一個正在執行的程序,只在記憶體資源出現不足時,Andro

使用ExecutorService、Callable、Future實現有返回結果的執行 應用例項

  以下是實踐中應用到的多執行緒:    1、controller程式碼:     @RequestMapping(value = "/getTraingingUsersByTrainingIds", method = {RequestMethod.GET, Reque

C# 解決子執行不能操作主執行UI(介面)問題涉及到執行的概念。

1、在預設情況下,C#不准許在一個執行緒中直接訪問或操作另一執行緒中建立的控制元件,這是因為訪問windows窗體控制元件本質上是不安全的。 2、執行緒之間是可以同時執行的,那麼如果有兩個或多個執行緒同時操作某一控制元件的某狀態,嘗試將一個控制元件變為自己需要的狀態時, 執行緒的死鎖就可能發生。

Windows遍歷全盤所搜檔案並通過執行顯示搜尋進度(C++/C)

程式設計軟體,系統 軟體:VS2017 工程屬性:MFC對話方塊(其他工程屬性稍作修改也適用) 系統:windows10家庭版 主要思想 1、利用CFileFind實現查詢檔案 2、利用遞迴實現全盤搜尋 3、多執行緒實現父對話方塊搜尋檔案時,子對話方塊顯示搜尋進度 軟體執行效

python執行————3、執行通訊:共享變數queue

1、共享變數 #通過共享變數 import time import threading url_list = [] def get_detail_html(): global url_list while True: if len(url_list):

互斥量在程序單程序不同執行使用

直接上程式碼了: #include <stdio.h> #include <stdlib.h> #include <Windows.h> int main() { /* 第二個引數:TRUE在建立互斥量之後立馬擁有該互斥量,

Asp.Net Core 輕鬆學-執行之取消令牌

前言     取消令牌(CancellationToken) 是 .Net Core 中的一項重要功能,正確併合理的使用 CancellationToken 可以讓業務達到簡化程式碼、提升服務效能的效果;當在業務開發中,需要對一些特定的應用場景進行深度干預的時候,CancellationToken 將發揮非

Asp.Net Core 輕鬆學-執行之Task快速上手

前言     Task是從 .NET Framework 4 開始引入的一項基於佇列的非同步任務(TAP)模式,從 .NET Framework 4.5 開始,任何使用 async/await 進行修飾的方法,都會被認為是一個非同步方法;實際上,這些非同步方法都是基於佇列的執行緒任務,從你開始使用 Task

springboot動態配置定時任務2種方式整合Quartz執行併發執行個定時任務配置

我的專案是採用的idea+gradle+springboot專案構建,下面是springboot實現定時任務所需要的jar包 //定時任務使用 compile group: 'org.quartz-scheduler', name: 'quartz', version:

spring的controller是單例模式但是是執行各個執行之間不影響

spring mvc 的Controller類預設Scope是單例(singleton)的 使用Spring MVC有一段時間了,之前一直使用Struts2,在struts2中action都是原型(prototype)的, 說是因為執行緒安全問題,對於Spring

解決面試題T1T2T3在執行中按順序執行

方法一、使用join方法處理 package com.cyc.redis.singleton; public class JoinExample { public static void main(String[] args) { Thread t1 = new Thre

java執行工具類可用該執行同時處理相同且數量的任務

package zrh4; public class ThreadModel {private static int maxThread = 4;protected static int currentThread = 0;private static ThreadMode

以同一張銀行卡取錢為例演示同步執行方法

public class BankDemo {public static void main(String[] args) { Bank bank=new Bank(); BankThread p1=new BankThread(bank); p1.start();//櫃

使用OpenMP進行執行處理時如何退出執行

       在進行多執行緒程式設計時,OpenMP是個非常有效的工具,它能最大化的將你的並行處理髮揮到極致。當然有如此便利的方面,自然也會有相應的限制條件。但是一旦熟悉使用,注意它的那幾個原則,也不會有什麼問題。        在最近的工作中,遇到了一種情況,內容如下:在