多執行緒join(),wait(),nitify()運用
import javax.swing.event.CellEditorListener;
public class test {
public static void main(String[] args) {
test1 test1=new test1();
Input input=new Input(test1);
Output output=new Output(test1);
new Thread(input).start();
new Thread(output).start();
}
}
class Input implements Runnable{
private test1 st;
private int sum;//定義一個變數
public Input(test1 st) {//通過構造方法接受一個TEST物件
// TODO Auto-generated constructor stub
this.st=st;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
st.put(sum++);//將sun存入陣列,每次存入後sum自增
}
}
}
class Output implements Runnable{
private test1 st;
public Output(test1 st) {
// TODO Auto-generated constructor stub
this.st=st;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
st.get();//迴圈取出元素
}
}
}
class test1{
//資料儲存陣列
private int[] cslls=new int[10];
//inpos表示存入時陣列下標,outpos表示取出時陣列的下標
private int inpos,outpos;
//存放取出資料的數量
private int coun;
//定義一個put()方法向陣列中存入資料
public synchronized void put(int num){
try {
//當放入資料等於陣列長度的時候,執行緒等待
while (coun==cslls.length) {
this.wait();
}
cslls[inpos]=num;
System.out.println("在cslls[inpos]中放入資料-----------------"+cslls[inpos]);
inpos++;//存完資料後讓下標加1;
if(inpos==cslls.length)
inpos=0;//當inpos為陣列長度時候,將其置位0;
coun++;
this.notify();
} catch (Exception e) {
// TODO: handle exception
}
}
//定義一個get()方法從陣列中取出資料
public void get(){
try {
//當放入資料等於陣列長度的時候,執行緒等待
while (coun==cslls.length) {
this.wait();
}
int data=cslls[outpos];
System.out.println("從cslls[inpos]中取出資料"+data);
outpos++;
if (outpos==cslls.length)
outpos=0;
this.notify();
} catch (Exception e) {
// TODO: handle exception
}
}
}
public class test {
public static void main(String[] args) {
test1 test1=new test1();
Input input=new Input(test1);
Output output=new Output(test1);
new Thread(input).start();
new Thread(output).start();
}
}
class Input implements Runnable{
private test1 st;
private int sum;//定義一個變數
public Input(test1 st) {//通過構造方法接受一個TEST物件
// TODO Auto-generated constructor stub
this.st=st;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
st.put(sum++);//將sun存入陣列,每次存入後sum自增
}
}
}
class Output implements Runnable{
private test1 st;
public Output(test1 st) {
// TODO Auto-generated constructor stub
this.st=st;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
st.get();//迴圈取出元素
}
}
}
class test1{
//資料儲存陣列
private int[] cslls=new int[10];
//inpos表示存入時陣列下標,outpos表示取出時陣列的下標
private int inpos,outpos;
//存放取出資料的數量
private int coun;
//定義一個put()方法向陣列中存入資料
public synchronized void put(int num){
try {
//當放入資料等於陣列長度的時候,執行緒等待
while (coun==cslls.length) {
this.wait();
}
cslls[inpos]=num;
System.out.println("在cslls[inpos]中放入資料-----------------"+cslls[inpos]);
inpos++;//存完資料後讓下標加1;
if(inpos==cslls.length)
inpos=0;//當inpos為陣列長度時候,將其置位0;
coun++;
this.notify();
} catch (Exception e) {
// TODO: handle exception
}
}
//定義一個get()方法從陣列中取出資料
public void get(){
try {
//當放入資料等於陣列長度的時候,執行緒等待
while (coun==cslls.length) {
this.wait();
}
int data=cslls[outpos];
System.out.println("從cslls[inpos]中取出資料"+data);
outpos++;
if (outpos==cslls.length)
outpos=0;
this.notify();
} catch (Exception e) {
// TODO: handle exception
}
}
}
相關文章
- java多執行緒基礎篇(wait、notify、join、sleep、yeild方法)Java執行緒AI
- 執行緒篇2:[- sleep、wait、notify、join、yield -]執行緒AI
- 9.1 運用API建立多執行緒API執行緒
- java多執行緒 wait() notify()簡單使用Java執行緒AI
- 【Java】【多執行緒】兩個執行緒間的通訊、wait、notify、notifyAllJava執行緒AI
- Java多執行緒 -- wait() 和 notify() 使用入門Java執行緒AI
- Java多執行緒中wait 和 notify 方法理解Java執行緒AI
- Java多執行緒中的wait/notify通訊模式Java執行緒AI模式
- 併發程式設計——執行緒中sleep(),yield(),join(),wait(),notify(),notifyAll()區別程式設計執行緒AI
- 多執行緒應用執行緒
- 多執行緒在打包工具中的運用執行緒
- 多執行緒,執行緒類三種方式,執行緒排程,執行緒同步,死鎖,執行緒間的通訊,阻塞佇列,wait和sleep區別?執行緒佇列AI
- pytest(13)-多執行緒、多程式執行用例執行緒
- java多執行緒8:阻塞佇列與Fork/Join框架Java執行緒佇列框架
- 多執行緒和多執行緒同步執行緒
- 多執行緒(一)、基礎概念及notify()和wait()的使用執行緒AI
- Java多執行緒學習(四)等待/通知(wait/notify)機制Java執行緒AI
- C++ Qt開發:運用QThread多執行緒元件C++QTthread執行緒元件
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- pytest多程式/多執行緒執行測試用例執行緒
- ObjC 多執行緒簡析(一)-多執行緒簡述和執行緒鎖的基本應用OBJ執行緒
- redis為什麼用單執行緒不用多執行緒Redis執行緒
- join、volatile、newSingleThreadLatch 實現執行緒順序執行thread執行緒
- Java多執行緒-執行緒中止Java執行緒
- 多執行緒之初識執行緒執行緒
- Thread執行緒控制之sleep、join、setDaemon方法的用處thread執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 多執行緒系列(1),多執行緒基礎執行緒
- Java之 join 等待執行緒終止Java執行緒
- a、多執行緒執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- Java多執行緒之執行緒中止Java執行緒
- Android多執行緒之執行緒池Android執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒-執行緒通訊Java執行緒