安卓ArrayBlockingQueue队列实现阻塞数据读写

安卓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版权协议,转载请附上原文出处链接和本声明。