日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 充電吧
[導(dǎo)讀]關(guān)于Java中的線程? ? ? ? ? ? ? ? ??1. 進(jìn)程 ? 進(jìn)程:正在運(yùn)行的程序,所占有內(nèi)存空間 ? 程序存儲(chǔ)在硬盤(pán),運(yùn)行時(shí)期到了內(nèi)存中 ? 線程:是一個(gè)大程序中的子程序 ? CPU真正執(zhí)

關(guān)于Java中的線程? ? ? ? ? ? ? ? ??
1. 進(jìn)程 ? 進(jìn)程:正在運(yùn)行的程序,所占有內(nèi)存空間 ? 程序存儲(chǔ)在硬盤(pán),運(yùn)行時(shí)期到了內(nèi)存中 ? 線程:是一個(gè)大程序中的子程序 ? CPU真正執(zhí)行的是線程,子程序?qū)τ贑PU來(lái)講獨(dú)立執(zhí)行路徑,路徑就是線程 //====================================================== 2. Java中創(chuàng)建線程 ? 任何都是對(duì)象,線程也是對(duì)象,對(duì)象的描述類 ? java.lang.Thread類 ? 創(chuàng)建線程的第一種方式,繼承Thread類,重寫(xiě)run方法 ? 創(chuàng)建Thread子類對(duì)象 ? 調(diào)用子類中的方法start()開(kāi)啟線程 ? ?void start() ? ? ? ? ? 使該線程開(kāi)始執(zhí)行;Java 虛擬機(jī)調(diào)用該線程的 run 方法。 ? JVM 本身是單線程的程序,還是多線程的程序 ? 一個(gè)線程運(yùn)行我們寫(xiě)的程序,一個(gè)線程不定時(shí)收取垃圾,JVM幫助你調(diào)用Windows中的功能 ? 為什么繼承Thread類,入伙,繼承Thread類,子類就是一個(gè)線程了 ? 為什么重寫(xiě)run方法 Thread中的run方法是空方法,等待子類重寫(xiě) ? 線程運(yùn)行的程序是什么,未知的,Java工程師,開(kāi)放多線程技術(shù)的時(shí)候 ? 不知道使用Java編程的人員會(huì)運(yùn)行哪些代碼 ? 提供一個(gè)標(biāo)準(zhǔn),就是run方法:不管線程運(yùn)行哪些代碼,必須放在run中,線程就運(yùn)行你run中的代碼
/* ?* 創(chuàng)建線程第一種方式,繼承Thread類 ?*/ class Demo1 extends Thread{ ?public void run(){ ? for(int x = 0 ; x < 50 ;x++){ ? ?System.out.println("run..."+x); ? } ?} } public class ThreadDemo1 { ?public static void main(String[] args) { ? while(true){ ? Demo1 d = new Demo1(); ? d.start();//開(kāi)啟線程,JVM自動(dòng)調(diào)用線程的run方法 ? for(int x = 0 ; x < 50 ; x++){ ? ?System.out.println("main..."+x); ? } ? } ?} }
//======================================================
4. 線程的狀態(tài)圖,必須自己會(huì)畫(huà)
5. 線程名字的獲取和設(shè)置 ? 獲取名字,Thread類的方法getName(),返回字符串 ? 線程名字JVM命名的 Thread-0 Thread-1 ? 在Thread子類中,直接使用父類方法getName()獲取名字 ? 在不是Thread子類中,獲取線程名字 ? Thread類中,提供了一個(gè)靜態(tài)方法 currentThread()返回值是一個(gè)Thread類的對(duì)象 ? 方法,返回當(dāng)前線程對(duì)象,既然返回的是對(duì)象,方法調(diào)用鏈 ? ?String name = Thread.currentThread().getName(); ? 設(shè)置線程的名字: ? ? Thread類的方法setName() ? ? Thread類的構(gòu)造方法 ? ? ? Thread(String name)傳遞線程名字 ? ? Thread子類中,super語(yǔ)句將線程的名字送到父類構(gòu)造方法


class ThreadName extends Thread{ ?ThreadName(String name){ ? super(name); ?} ?public void run(){ ? String name =Thread.currentThread().getName(); ? System.out.println(name+" 線程ThreadName"); ?} } public class ThreadDemo { ?public static void main(String[] args) { ? //Thread.currentThread();//返回的就是運(yùn)行main方法的線程對(duì)象 ? String name = Thread.currentThread().getName(); ? System.out.println(name); ? ThreadName t1 = new ThreadName("西班牙0"); ? ThreadName t2 = new ThreadName("智利2"); ? ?// t1.setName("小強(qiáng)"); ?// t2.setName("旺財(cái)"); ? ? t1.start(); ? t2.start(); ?} }
//====================================================== 6. 售票的一個(gè)案例 ? 利用多線程模擬多窗口一起售票 ? 模擬出了,卡機(jī)線程,導(dǎo)致了數(shù)據(jù)的安全問(wèn)題 ? 多線程操作同一個(gè)數(shù)據(jù)的時(shí)候,出現(xiàn)數(shù)據(jù)安全問(wèn)題 ? ? ?解決辦法:一個(gè)線程不執(zhí)行完畢,其他的線程,不能執(zhí)行 ? ? Java中開(kāi)放出了同步技術(shù),保證線程的安全性,會(huì)阻止其他線程進(jìn)入 ? 同步代碼塊 ? ? synchronized(任意對(duì)象){ ? ? ? ? ? ?線程操作的共享數(shù)據(jù) ? ? }

/* ?* 模擬售票4個(gè)窗口一起出售 ?* 改造成實(shí)現(xiàn)Runnable接口的方式 ?*/ class Ticket implements Runnable{ ?private int tickets = 100; ?private Object obj = new Object(); ?public void run(){ ? while(true){ ? ?synchronized(obj){ ? ?if(tickets > 0){ ? ? //線程if判斷完畢后,休眠一段時(shí)間 ? ? try{ ? ? Thread.sleep(67); ? ? }catch(Exception e){} ? ? System.out.println(Thread.currentThread().getName()+"..出售第.."+tickets--); ? ?} ? ?} ? } ?} } public class ThreadDemo1 { ?public static void main(String[] args) { ? //創(chuàng)建Ticket對(duì)象 ? Ticket t = new Ticket(); ? //創(chuàng)建Thread類對(duì)象,傳遞Runnable接口的實(shí)現(xiàn)類對(duì)象 ? Thread t1 = new Thread(t); ? Thread t2 = new Thread(t); ? Thread t3 = new Thread(t); ? Thread t4 = new Thread(t); ? t1.start(); ? t2.start(); ? t3.start(); ? t4.start(); ?} }
//====================================================== 7. 創(chuàng)建線程的第二種方式 ? 定義類,實(shí)現(xiàn)Runnable接口 ? 重寫(xiě)run方法 ? class A implements Runnable{ ? ? ? ? public void run(){ ?} ? } ? A類不再是線程類了 ? 直接創(chuàng)建Thread類對(duì)象 ? 構(gòu)造方法Thread(Runnable target) 接受的數(shù)據(jù)類型是Runnable接口的子類類型 ? new Thread(new A());? ? 調(diào)用Thread類中的start();
? 兩個(gè)線程的創(chuàng)建方式的區(qū)別 ? 繼承Thread類,實(shí)現(xiàn)Runnable接口區(qū)別 ? 繼承,單繼承局限性 ? 接口,多現(xiàn)實(shí),避免了單繼承的局限性 ? 繼承Thread類方式,線程中的數(shù)據(jù)是對(duì)象自己的 ? 實(shí)現(xiàn)接口方法,線程中的數(shù)據(jù)是共享的 ? 寫(xiě)多線程程序推薦使用接口方式 //====================================================== 8. 同步的原理 ? ? synchronized(任意對(duì)象){ ? ? ? ? ? ?線程操作的共享數(shù)據(jù) ? ? } ? ? 對(duì)象,寫(xiě)在了同步中 ? 專業(yè)名詞,對(duì)象監(jiān)視器 ? 通俗一點(diǎn):鎖 ? 線程進(jìn)到同步代碼塊后,線程獲取這把鎖,這扇門(mén)永久關(guān)閉了 ? 當(dāng)線程出去同步代碼塊,將鎖釋放 ? 廁所原理 ? 多線程操作同一個(gè)數(shù)據(jù),安全問(wèn)題 ? 如果是單線程,沒(méi)有數(shù)據(jù)安全問(wèn)題


//====================================================== 9. 模擬存錢(qián) ? 一張卡,可以多個(gè)柜臺(tái)存錢(qián) ? 余額是0,每個(gè)柜臺(tái)每次存100元 ? 兩個(gè)柜臺(tái),每個(gè)存3次 ? 600元,沒(méi)存一次,查看余額 ? 同步方法,在方法的聲明上寫(xiě)同步關(guān)鍵字 ? 線程每次只有一個(gè)運(yùn)行這個(gè)方法 ? 當(dāng)方法中所有代碼都是線程操作的的共享數(shù)據(jù) ? 同步方法中,鎖是什么 ? 確定的是,鎖肯定有,鎖必須是對(duì)象 ? 鎖是本類的對(duì)象引用this ? 方法中的同步代碼塊,鎖直接寫(xiě)this ? 靜態(tài)方法中的,同步鎖是誰(shuí) ? 鎖是對(duì)象! ? 靜態(tài)優(yōu)先于對(duì)象,靜態(tài)中的鎖,是本類的class文件對(duì)象 ? Java中,每一個(gè)數(shù)據(jù)類型,JVM都賦予他們一個(gè)靜態(tài)成員變量 ? class名字,變量的運(yùn)行結(jié)果就是類的class文件對(duì)象 ? 靜態(tài)方法中的鎖,就是本類.class字節(jié)碼文件對(duì)象

/* ?* 存錢(qián)的時(shí)候 ?* 卡,錢(qián),到銀行中去,銀行柜臺(tái)存錢(qián) ?* 但是,整個(gè)Add方法中的所有代碼,都是線程操作的共享數(shù)據(jù) ?* 沒(méi)有必要同步一段代碼,同步整個(gè)方法 ?*/ class Bank{ ?//存錢(qián)功能,存一次,看余額 ?private static int sum = 0; ?public static synchronized void add(int money){ ?// synchronized(Bank.class){ ? sum = sum + money; ? System.out.println(sum); ?// } ?} } class Customer implements Runnable{ ?private Bank b = new Bank(); ?public void run(){ ? for(int x = 0 ; x < 3 ; x++){ ? Bank.add(100); ? } ?} } public class ThreadDemo2 { ?public static void main(String[] args) { ? Customer c = new Customer(); ? Thread t1 = new Thread(c); ? Thread t2 = new Thread(c); ? t1.start(); ? t2.start(); ?} }

//============================================================== 10. 單例模式 ? 懶漢有安全隱患,多線程并發(fā)訪問(wèn)懶漢式的時(shí)候 ? 安全問(wèn)題,同步避免 ? 效率很低,提高懶漢的效率 ? 第一次執(zhí)行s=null ? 進(jìn)同步 創(chuàng)建對(duì)象,返回 ? 第二次執(zhí)行s!=null ? 沒(méi)有必要進(jìn)同步了,直接返回 ? 兩次判斷,提高效率
class Single{ ?private Single(){} ?private static Single s = null; ?public static Single getInstance(){ ? ? if(s == null){ ? ? synchronized(Single.class){ ? if( s == null) ? ?s = new Single(); ? ? ? ? } ? } ? ? return s; ?} } class SingleThead implements Runnable{ ?public void run(){ ? for(int x = 0 ; x < 30 ; x++){ ? ?Single s = Single.getInstance(); ? ?System.out.println(s); ? } ?} }
//============================================================== 11. 死鎖案例 ? 在多線程的技術(shù)中,兩個(gè)或者兩個(gè)以上的線程,同時(shí)爭(zhēng)奪一個(gè)對(duì)象監(jiān)視器 ? 導(dǎo)致程序的假死現(xiàn)象 ? 死鎖:出現(xiàn)條件,必須多線程,爭(zhēng)奪一個(gè)鎖,程序中,體現(xiàn)在同步代碼塊的嵌套效果 ? 死鎖的案例,面試過(guò)程中經(jīng)常被考到 //============================================================== 12. 線程的通信 ? 兩個(gè)線程同時(shí)對(duì)一個(gè)資源對(duì)象,進(jìn)行賦值和取值操作 ? 思考,數(shù)據(jù)安全問(wèn)題怎么發(fā)生的 ? 發(fā)生后,怎么解決 ? 數(shù)據(jù)安全問(wèn)題:線程的隨機(jī)性導(dǎo)致程序數(shù)據(jù)安全隱患 ? 采用了同步技術(shù),依然沒(méi)有解決 ? 當(dāng)你發(fā)現(xiàn)數(shù)據(jù)安全問(wèn)題后,使用了同步技術(shù),還是不能解決 ? ? 第一點(diǎn),確定程序是不是多線程在操作共享數(shù)據(jù) 確定 ? ? 第二點(diǎn),使用的同步中的鎖,是同一把鎖嗎,鎖不同唯一的 ? ? ? 必須將鎖變成唯一的對(duì)象,才能控制數(shù)據(jù)安全問(wèn)題 ? ? ? 資源對(duì)象,數(shù)據(jù)的安全性解決了
? 線程等待和喚醒的方法 ? 沒(méi)有出現(xiàn)在線程描述類Thread類中 ? 方法定義在了Object類中,為什么這樣設(shè)計(jì) ? 原因是鎖,鎖是一個(gè)對(duì)象,對(duì)象是通過(guò)類new出來(lái)的 ? 鎖是哪一個(gè)類的對(duì)象,無(wú)法確定的 ? 但是將方法寫(xiě)在Object類中,所有的類的對(duì)象,都具有線程的等待與喚醒方法 ? wait()方法的使用,將線程永久等待,直到有人喚醒 ? wait方法必須有鎖的支持,wait方法必須寫(xiě)在同步中 ? 鎖是唯一的 ? synchronized(r){ ? ? ?wait(); ? ? ?notify(); ? } ? synchronized(r){ ? ? ?notify() ? } ? IllegalMonitorStateException ? 異常,運(yùn)行時(shí)期的異常,拋出該異常,說(shuō)明wait notify沒(méi)有鎖的支持,沒(méi)有對(duì)象監(jiān)視器
/* ?* 線程通信的代碼的優(yōu)化 ?*/ //定義資源類,私有處理 class Recource{ ?private String name; ?private String sex; ?private boolean flag = false; ?//提供get set方法,訪問(wèn)成員變量 ?public synchronized void set(String name,String sex){ ? if(flag) ? ?try{ ? ?this.wait(); ? ?}catch(Exception e){} ? this.name = name; ? this.sex = sex; ? flag = true; ? this.notify(); ?} ?public synchronized void get(){ ? if(!flag) ? ?try{ ? ?this.wait(); ? ?}catch(Exception e){} ? System.out.println(name+"..."+sex); ? flag = false; ? this.notify(); ?} } //輸入線程 class Input implements Runnable{ ?private Recource r; ?Input(Recource r){this.r = r;} ?public void run(){ ? int x = 0 ; ? while(true){ ? ?if(x %2 == 0){ ? ? r.set("張三", "男"); ? ?}else{ ? ? r.set("李四", "女"); ? ?} ? ?x++; ? } ?} } //輸出的線程 class Output implements Runnable{ ?private Recource r ; ?Output(Recource r){this.r=r;} ?public void run(){ ? while(true){ ? ?r.get(); ? } ?} } public class ThreadDemo5 { ?public static void main(String[] args) { ? Recource r = new Recource(); ? new Thread(new Input(r)).start(); ? new Thread(new Output(r)).start(); ?} }

//============================================================== 13. wait() sleep() 導(dǎo)致線程等待,兩個(gè)方法區(qū)別在哪里(不要光看表面。) ?? ? sleep(毫秒值)自動(dòng)醒來(lái) ? wait()永久等待,需要?jiǎng)e的線程喚醒
? sleep()方法是Thread類的靜態(tài)方法 ? wait()方法是Object類的非靜態(tài)方法
? sleep()不需要對(duì)象鎖 ? wait()必須有鎖的支持
? sleep()方法,執(zhí)行的時(shí)候線程不會(huì)釋放對(duì)象鎖 ? wait()方法,執(zhí)行的時(shí)候,線程放棄對(duì)象鎖,被喚醒的時(shí)候,從新獲取對(duì)象鎖,才能運(yùn)行 //============================================================== 14. 定時(shí)器 ? Java程序中,有定時(shí)功能,按照一定的時(shí)間間隔運(yùn)行指定的程序 ? 定時(shí)器類,java.util.Timer ? 構(gòu)造方法 ? ? Timer(boolean isDaemon) false 不是守護(hù)的線程 ? ? schedule(TimerTask task, Date firstTime, long period) ? ? ? ? ? ? ? ? ? ? ? ?定時(shí)器任務(wù) ? ? ? ? ? ? ?第一次時(shí)間 ? ? ? ? 間隔 ? 抽象類 TimerTask 時(shí)間任務(wù),定時(shí)器執(zhí)行的程序,寫(xiě)在這個(gè)類的run方法

/*class Time extends TimerTask{ ?public void run(){ ? System.out.println("定時(shí)2秒鐘發(fā)送一次郵件"); ?} }*/ public class TimerDemo { ?public static void main(String[] args) { ? Timer t = new Timer(false); ? ? t.schedule(new TimerTask(){ ? ?public void run(){ ? ? System.out.println(""定時(shí)2秒鐘發(fā)送一次郵件""); ? ?} ? }, new Date(), 3600000); ? ? System.out.println("main...over"); ?} }

//==============================================================
15. 多線程通信,生產(chǎn)者與消費(fèi)者 ? 一個(gè)產(chǎn)品,分別線程控制,一個(gè)控制生產(chǎn),一個(gè)控制消費(fèi) ? 生產(chǎn)一個(gè),消費(fèi)一個(gè),多生產(chǎn)者,多消費(fèi)者 ? 多個(gè)生產(chǎn)與多個(gè)消費(fèi),全部的喚醒notifyAll() ? 喚醒以后,數(shù)據(jù)安全性還是沒(méi)解決 ? 線程在wait上等待,被喚醒的時(shí)候,從Wait這里起來(lái) ? 起來(lái)以后,不會(huì)再次判斷flag是true,還是false,因此數(shù)據(jù)問(wèn)題,沒(méi)喲解決 ? 線程,被喚醒以后,但是判斷標(biāo)記!! ? 用的是循環(huán)的方式,解決線程倒下去后,再起來(lái),必須還要判斷標(biāo)記 ? 但是發(fā)現(xiàn)一個(gè)問(wèn)題: ? ? notifyAll()喚醒了全部等待的線程 ? ? 1個(gè)活的,7個(gè)等著,全部醒來(lái) ? ? 浪費(fèi)資源,能不能喚醒對(duì)方的一個(gè)線程的 ? ? 生產(chǎn)者,只喚醒一個(gè)消費(fèi)者 ? ? 消費(fèi)者,只喚醒一個(gè)生產(chǎn)者 ? ? 喚醒本方是沒(méi)有意義,全部喚醒是浪費(fèi)資源的 ? ? Java的JDK1.4版本之前,是做不到了 ? ? 到了JDK1.5版本后,就可以實(shí)現(xiàn)了 ? ? 提供一套新的多線程的操作方式 ? ? synchronized,被替換了 ? ? wait(),notify(),notifyAll(),被替換了 ? ? JDK1.5的新特性,線程鎖定操作 ? ? 導(dǎo)包 java.util.concurrent.locks


//============================================================== 16. JDK1.5的鎖 lock接口 ? Lock接口--synchronized同步 ? 同步是有鎖提供 ? 接口中,定義了兩個(gè)方法 lock() unlock() ? 要同步線程的時(shí)候,使用這兩個(gè)方法,進(jìn)行鎖操作 ? Lcok接口的實(shí)現(xiàn)類對(duì)象ReentrantLock ? 獲取到接口的實(shí)現(xiàn)類對(duì)象,調(diào)用方法,鎖操作 ? 新的技術(shù)中,JDK提供了一個(gè)接口Condition ? 替換了原有線程方法,wait,notify ? 將線程進(jìn)行分組管理 ? t1-t4 set方法,用鎖就是set方法中的鎖 ? t5-t8 get方法,用鎖就是get方法中的鎖 ? 一個(gè)lock接口上,可以實(shí)現(xiàn)多個(gè)Condition對(duì)象 ? final Condition notFull = lock.newCondition(); ? final Condition notEmpty = lock.newCondition(); ? 將一個(gè)接口Lock,分成兩組管理 ? Condition接口中的三個(gè)方法 ? ?await() -- wait() ? ?signal() -- notify() ? ?signalAll() -- notifyAll();

/* ?* 將案例,改造成lock鎖方式實(shí)現(xiàn)功能 ?*/ import java.util.concurrent.locks.*; class Product{ ?private String name; ?//定義計(jì)數(shù)器 ?private int count ; ?//定義標(biāo)識(shí) ?private boolean flag = false; ?//定義Lock鎖對(duì)象 ?private Lock lock = new ReentrantLock(); ?//通過(guò)Lock接口,獲取Condition對(duì)象 ?private Condition pro = lock.newCondition(); ?private Condition cus = lock.newCondition(); ? ?//定義生產(chǎn)方法 ?public void set(String name){ ? //獲取鎖 ? lock.lock(); ? while(flag) ? ?try{ ? ? ?pro.await(); ? ?}catch(Exception e){} ? this.name = name + count++; ? System.out.println(Thread.currentThread().getName()+"生產(chǎn)第..."+this.name); ? flag = true; ? //this.notifyAll(); ? //釋放鎖 ? cus.signal(); ? lock.unlock(); ?} ? ?//定義消費(fèi)方法 ?public void get(){ ? lock.lock(); ? while(!flag) ? ?try{ ? ?cus.await(); ? ?}catch(Exception e){} ? System.out.println(Thread.currentThread().getName()+"消費(fèi)第........."+this.name); ? flag = false; ? //this.notifyAll(); ? pro.signal(); ? lock.unlock(); ?} } //定義生產(chǎn)者 class Producter implements Runnable{ ?private Product p ; ?Producter(Product p){this.p = p;} ?public void run(){ ? while(true){ ? ?p.set("鍵盤(pán)"); ? } ?} } //定義消費(fèi)這 class Customer implements Runnable{ ?private Product p ; ?Customer(Product p){this.p = p;} ?public void run(){ ? while(true){ ? ?p.get(); ? } ?} } public class ThreadDemo { ?public static void main(String[] args) { ? Product p = new Product(); ? Producter producter = new Producter(p); ? Customer customer = new Customer(p); ? Thread t1 = new Thread(producter); ? Thread t2 = new Thread(producter); ? Thread t3 = new Thread(producter); ? Thread t4 = new Thread(producter); ? Thread t5 = new Thread(customer); ? Thread t6 = new Thread(customer); ? Thread t7 = new Thread(customer); ? Thread t8 = new Thread(customer); ? t1.start(); ? t2.start(); ? t3.start(); ? t4.start(); ? t5.start(); ? t6.start(); ? t7.start(); ? t8.start(); ?} }

//========================================================== 17. 線程的停止方式 ? Thread類中,有一個(gè)方法stop(),過(guò)時(shí)
? 終止線程的運(yùn)行,目的結(jié)束run方法就行 ? 停止線程的第一種方式,改變變量的值,結(jié)束while循環(huán),結(jié)束了run方法 ?? 處于等待中的線程,怎么停下 ? 例子: ? ? 我有一個(gè)朋友,失眠,找了一個(gè)催眠大師(水平很高) ? ? 進(jìn)行了催眠,朋友就睡了(wait()) ? ? 催眠師說(shuō),被我催眠的人,只有我能叫醒 ? ? 催眠師死了,不能讓朋友永久的等待下去 ? ? 拍你一板磚,醒來(lái),收到了傷害(異常) ? ? 線程的第二種停止方式 ? ? void interrupt() + 異常停下,等待中的線程 ? ? 打擊線程方法,處于等待的線程,將會(huì)拋出異常
/* ?* 線程如何停止下來(lái) ?*/ class StopThread implements Runnable{ ?private boolean flag = true; ?public void run(){ ? while(flag){ ? ?synchronized(this){ ? ? try{this.wait();}catch(Exception e){ ? ? ?e.printStackTrace(); ? ? ?//System.out.println(e.getMessage()+"打你一板磚"); ? ? ?flag = false; ? ? } ? ?System.out.println("run...."); ? ?} ? } ?} ?public void setFlag(boolean flag){ ? this.flag = flag; ?} } public class ThreadDemo1 { ?public static void main(String[] args) { ? StopThread st = new StopThread(); ? Thread t = new Thread(st); ? t.start(); ? for(int x = 0 ; x < 1000 ; x++){ ? if(x==999) ? ? ? //st.setFlag(false); ? ?t.interrupt(); ? else ? ?System.out.println("main"+x); ? } ?} }
//========================================================== 18. 守護(hù)線程 ? Thread類中。setDaemon(boolean )傳遞是true,線程守護(hù)線程 ? 如果所有運(yùn)行的線程,都是守護(hù)線程,JVM退出
? 方法,必須在start開(kāi)始前調(diào)用
? Feiq,開(kāi)啟多個(gè)聊天窗口的時(shí)候,一旦關(guān)閉飛秋主程序,聊天窗口也就關(guān)閉了 ? 聊天窗口線程,就是飛秋主線程的守護(hù)線程,一旦主線程死亡,所有的守護(hù)線程就死亡
/* ?* 守護(hù)線程 ?*/ class ThreadDaemon implements Runnable{ ?public void run(){ ? while(true) ? System.out.println("run...."); ?} } public class ThreadDemo2 { ?public static void main(String[] args) { ? ThreadDaemon td = new ThreadDaemon(); ? Thread t = new Thread(td); ? t.setDaemon(true); ? t.start(); ?} }


//========================================================== 19. Thread中其他方法,toString() setPriority() join() yield() ? toString()繼承Object,重寫(xiě)toString() ? Thread[Thread-0,5,main] ? 5 優(yōu)先級(jí),main 線程組 ? 優(yōu)先級(jí)三個(gè)級(jí)別,最低,默認(rèn),最高 ? setPriority(int )設(shè)置優(yōu)先級(jí) ? 但是優(yōu)先級(jí)的效果,多核,多線程的CPU上,效果不是很明顯了 ? join() 加入 等待該線程終止 ? 使用join方法的線程,不停止,其他線程運(yùn)行不了 ? static yield()
/* ?* 線程的讓步方法,static yield ?*/ class YieldThread implements Runnable{ ?public void run(){ ? for(int x = 0 ; x < 100 ; x++){ ? ?Thread.yield(); ? ?System.out.println(Thread.currentThread().getName()+"run.."+x); ? } ?} } public class ThreadDemo5 { ?public static void main(String[] args) { ? YieldThread yt = new YieldThread(); ? Thread t0 = new Thread(yt); ? Thread t1 = new Thread(yt); ? t0.start(); ? t1.start(); ?} }


/* ?* 等待該線程終止 ?*/ class JoinThread implements Runnable{ ?public void run(){ ? for(int x = 0 ; x < 100; x++){ ? ?System.out.println(Thread.currentThread().getName()+"run.."+x); ? } ?} } public class ThreadDemo4 { ?public static void main(String[] args) throws Exception{ ? JoinThread jt = new JoinThread(); ? Thread t0 = new Thread(jt); ? Thread t1 = new Thread(jt); ? ? ?t0.start(); ? ? ?t0.join(); ? ? ?t1.start(); ? for(int x = 0 ;x < 100 ; x++){ ? ?System.out.println("main...."+x); ? } ?} }
/* ?* Thread中的toString() ?*/ class ThreadToString implements Runnable{ ?public void run(){ ? for(int x = 0 ; x < 100 ; x++){ ? ?System.out.println(Thread.currentThread().getName()+"run.."+x); ? } ?} } public class ThreadDemo3 { ?public static void main(String[] args) { ? ThreadToString tts = new ThreadToString(); ? Thread t0 = new Thread(tts); ? Thread t1 = new Thread(tts); ? t0.setPriority(Thread.MAX_PRIORITY); ? t1.setPriority(Thread.NORM_PRIORITY); ? t0.start(); ? t1.start(); ?// System.out.println(t); ?} }


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉