安卓ArrayBlockingQueue队列实现阻塞数据读写
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
最近一直在看安卓相关,想想怎么实现类似阻塞式的队列读写,参照大佬指导,写下如下代码
提示:以下是本篇文章正文内容,下面案例可供参考
一、ArrayBlockingQueue队列DEMO实现
1.详细代码
代码如下(示例):
package com.example.myqueue;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.gson.Gson;
import java.util.concurrent.ArrayBlockingQueue;
public class MainActivity extends AppCompatActivity {
private final static String Tag = "MyQueue";
private Gson mgson = new Gson();
private MyInfo myinfo;
private MyInfo recvinfo = new MyInfo();
private ArrayBlockingQueue<MyInfo> GsonQueue = new ArrayBlockingQueue<MyInfo>(5);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setQueue(); //开启写入线程
getQueue(); //开启获取线程
}
private void setQueue(){
new Thread(){
@Override
public void run() {
for(int i = 0;i<10;i++){
myinfo = new MyInfo(); //大大佬指导,如果不创建实例只是用同一个实例,里面指向的就是同一个对象,知识点,要记
myinfo.setID(i);
myinfo.setdata(Integer.toString(i));
try {
GsonQueue.put(myinfo); //向队列中写入myinfo对象,阻塞方法
Log.e(Tag,"set:"+myinfo.data);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
private void getQueue(){
new Thread(){
@Override
public void run() {
while (true){
try {
recvinfo = GsonQueue.take(); //从队列中获取myinfo对象,阻塞方法
Log.e(Tag,"get:"+recvinfo.data);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
static class MyInfo {
private int ID;
private String data;
public int setID(int ID){
return this.ID = ID;
}
public String setdata(String data){
return this.data = data;
}
}
}
提示:大大佬指导,如果不创建实例只是用同一个实例,队列里面指向的就是同一个对象,知识点,要记
写在结尾
我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步
版权声明:本文为weixin_43153912原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。