控制執行緒的五種方法(前三種)
控制執行緒的第一種方法:執行緒的休眠
執行緒休眠的目的:防止cpu的佔有率過高
public class Demo01 {
/**
* 執行緒的五種控制方法之一:執行緒的休眠
*/
public static void main(String[] args) {
for(int i=0;i<1000;i++)
{
System.out.println(Thread.currentThread().getName()+"----i="+i);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
一個例子:
public class Demo02 extends JFrame {
/**
* 讓當前物件的時間顯示出來
*/
//定義一個文字框
private JLabel show=new JLabel();
private SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public Demo02()
{
super("Demo02");
this.setResizable(false);
this.setSize(300,80);
this.setLocation(200,200);
show.setForeground(Color.RED);
show.setFont(new Font("微軟雅黑",Font.BOLD,24));
//將給定的日期轉換為字串
show.setText(sf.format(new Date()));
new Thread(new Runnable() {
@Override
public void run() {
while(true)
{
show.setText(sf.format(new Date()));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
this.add(show);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Demo02();
}
}
控制執行緒的第二種方法:守護執行緒
一個例子:
public class Demo03 {
/**
* 控制執行緒的第二種方法:守護執行緒setdaemon
* 如果被守護的執行緒執行完之後,守護執行緒執行一會兒就結束
*/
public static void main(String[] args) {
RunFor1 runFor1=new RunFor1();
//將runfor1設定為守護執行緒
runFor1.setDaemon(true);
runFor1.start();
for(int i=0;i<1000;i++)
{
System.out.println(Thread.currentThread().getName()+"----i="+i);
}
}
static class RunFor1 extends Thread{
RunFor1()
{
super("RunFor1");
}
@Override
public void run() {
for(int i=0;i<1000;i++)
{
System.out.println(Thread.currentThread().getName()+"----i="+i);
}
}
}
}
控制執行緒第三種方法的讓步
一個例子:
public class Demo04 {
/**
* 執行緒控制的第三章方法:執行緒的讓步yield
*/
public static void main(String[] args) {
MyT1 myT1=new MyT1("帥哥");
MyT1 myT2=new MyT1("美女");
myT1.start();
myT2.start();
}
static class MyT1 extends Thread{
private String name;
MyT1(String name)
{
super(name);
this.name=name;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println(Thread.currentThread().getName() + "----i=" + i);
Thread.yield();
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
相關推薦
控制執行緒的五種方法(前三種)
控制執行緒的第一種方法:執行緒的休眠 執行緒休眠的目的:防止cpu的佔有率過高 public class Demo01 { /** * 執行緒的五種控制方法之一:執行緒的休眠 */ public static void main(String[] args) {
多執行緒同步的五種方法-(銀行存取錢)
一、五種方法1)同步方法synochronized2)同步塊synochronized3)特殊域變數volatile4)重人鎖ReentrantLook5)區域性變數ThreadLocal二、為什麼要執行緒同步因為當我們有多個執行緒要同時訪問一個變數或物件時,如果這些執行緒中
JAVA中執行緒同步的方法(7種)彙總
同步的方法: 一、同步方法 即有synchronized關鍵字修飾的方法。 由於java的每個物件都有一個內建鎖,當用此關鍵字修飾方法時, 內建鎖會保護整個方法。在呼叫該方法前,需要獲得內建鎖,否則就處於阻塞狀態。 注: synchronized關鍵字也可以修飾靜態
八種控制執行緒順序的方法
各位看官,我去年路過陳家村時,聽到大神們在討論一些排序演算法,比如猴子排序法、睡眠排序法等,猴子排序法就是給猴子一堆亂序的數, 讓它自己玩,最後總有一個順序是對的!睡眠排序法,按數的大小分配執行緒睡眠時間,數越大睡眠時間就越長,然後同時啟動全部執行緒,按 先後輸出排序即成!想想也不無道理,那我就
OpenVZ架構VPS安裝BBR的五種方法(UML-LKL-LKL_Rinetd)
用戶 所見 unit 系統 nor hub rinetd 0.0.0.0 http OpenVZ架構雲主機部署BBR的五種方式(UML/LKL/LKL_Rinetd) 簡介 日前OpenVZ部署BBR可謂火氣酷熱。可樂一向沒寫教程,今日就把伏筆VPS所見到的做成集中寫成文章
多執行緒常用操作方法(sleep、yield、join)
執行緒的命名與取得 執行緒的命名: 通過構造方法在建立執行緒時設定執行緒名稱 直接繼承Thread類: public Thread (String name); Runable或者Callable介面實現多執行緒: public Thread (Run
多執行緒——常用操作方法(二)
多執行緒常用操作可以總結成一下七種。 1、取得當前執行緒物件: public static native Thread currentThread(); 2、執行緒的命名和取得當前執行緒的名字:public Thread(Runnable terget,String n
執行緒的建立方法,有幾種?那種好?
執行緒常用的建立方式,有兩種,第一種是使用Runnable。第二種是繼承Thread型別。 實現Runnable介面更好一些。 1,因為實現Runnable介面可以避免Java單繼承的侷限性。 當
多執行緒之join()方法---(Thread提供的讓一個執行緒等待另一個執行緒完成的方法)
package Demo1; /** * Created by Petty on 2017/4/9. */ public class Thread_1 extends Thread {
Javascript異步編程的4種方法(阮一峰)
cal 每一個 exp 好的 而且 any tail http請求 觸發 轉載: http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 你可能知道,Javascript語言
linux伺服器上安裝jdk的兩種方法(yum+下載包)
這篇文章主要給大家介紹了關於在linux伺服器上安裝jdk的兩種方法,分別是利用yum安裝和從官網下載包安裝,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧 前言 對於開發者來說,安裝jdk按理說是非常簡單的事,
兩欄佈局三種方法(親測有效)
第一種: 只需要兩個div就能實現,主要原理是將第一個div設為浮動,並加上寬度,然後就可以實現兩欄佈局,並不需要設定第二個div的任何東西。程式碼如下: div{ height:500px; } #aside{
把數字倒序的幾種方法(不定時更新)(c++)
方法一:(最初級) 【問題描述】 把一個固定的5位數倒序。 【輸入形式】 從鍵盤輸入一個5位數。 【輸出形式】 倒序後的5位數。 【樣例輸入】 12345 【樣例輸出】 54321 解題思路: 題目已經說明是固定的5位數了,就把每位分解輸出就可以。 解題程式碼:
併發:等待多執行緒完成的CountDownLatch(倒數計時器)。
CountDownLatch允許一個或多個執行緒等待其他執行緒完成操作。 假如有這樣一個需求:我們需要解析一個Excel裡多個sheet的資料,此時可以考慮使用多執行緒,每個執行緒解析一個sheet裡的資料,等到所有的sheet都解析完之後,程式需要提示解析完成。在這個需求中,要實現主執行緒等待
日常小結-多執行緒的單例模式的三種實現方式
多執行緒單例模式在很多併發的書裡面都有寫。這裡做一個簡單的總結。主要內容來自《java併發程式設計的藝術》《java多執行緒程式設計核心》 單例模式的分類 餓漢模式:類初始化的時候就進行建立單例模式 懶漢模式:在呼叫getinstance方法的時候才建
程序、執行緒、協程(協程篇)
什麼是協程? 首先,先說一個前提:子程式/函式:在所有語言中都是層級呼叫的,比如A呼叫B。在B執行過程中又可以呼叫C,C執行完畢返回,B執行完畢返回,最後是A執行完畢返回。是通過棧實現的,一個執行緒就是執行一個子程式,子程式呼叫總是一個入口,一次返回,呼叫的順序是明確的。
Java如何保證集合是執行緒安全的?(程式碼實踐拋磚引玉)
在Java中絕大部分的集合像什麼ArrayList、HashMap等絕大部分不是執行緒安全的。僅有的執行緒安全的實現,像HashTable、Vector等在效能上又不好。但是不要怕啊。我們大Java還有併發包(Java.util.concurrent)啊,為高度併發需求提供了全面
Java多執行緒面試知識點彙總(超詳細總結)
一、sleep()方法、wait()方法、yeild()方法、interrupt()方法、notify()、notifyAll()方法 1、sleep()方法: sleep方法為Thread的靜態方法; sleep方法的作用是讓執行緒休眠指定時間,在時間到
多執行緒同步-互斥物件(深入理解Mutex)
多執行緒之執行緒同步Mutex (功能與Critial Sections相同,但是屬於核心物件,訪問速度較慢,可以被不同程序呼叫)一 Mutex 互斥物件(mutex)核心物件能夠確保執行緒擁有對單個資源的互斥訪問權。實際上互斥物件是因此而得名的。互斥物件包含一個使用數量,
多執行緒爬取圖片(生產者-消費者模式)
通過生產者-消費者模式實現多執行緒爬取圖片: 1、生產者通過不斷爬取網頁中圖片的url存入圖片佇列中 2、消費者通過圖片佇列中的url爬取圖片並下載到本地 3、多執行緒的方式,爬取與下載同時進行,直到子執行緒結束,輸出爬取時間 1 #多執行緒下載圖片 2 #生產者