多线程

本文介绍了一个使用多线程实现XMPP登录及群聊功能的应用案例。该应用首先在主线程中建立XMPP连接,随后在工作线程中进行登录并加入指定的群聊房间。文中详细展示了如何通过synchronized关键字和wait/notify方法来实现线程间的同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作线程

public void run() {
                try {
//登录线程需要连接线程中的资源
                    //判断资源存不存在,不存在wiat
                    if (TApplication.xmppConnection.isConnected()==false)
                    {
                        Log.i("多线程", Thread.currentThread().getId()+","+System.currentTimeMillis()+",开始wait ");

                        //对象锁
                        synchronized (TApplication.objlock) {
                            TApplication.objlock.wait();
                        }
                    }
                    Log.i("多线程", Thread.currentThread().getId()+","+System.currentTimeMillis()+",不等了,开始登录");

                    TApplication.xmppConnection.login("zhangjiujun2",
                            "1");
                    //加入群聊
                    TApplication.multiUserChat=new MultiUserChat
                            (TApplication.xmppConnection,
                            "gsd16022@conference.tarena.com");
                    TApplication.multiUserChat.join("我是zhangjiujun");
                    //在android加入成功,电脑上的spark上能看到

主线程

new Thread() {
            public void run() {
                try {
                    
                    //让框架中的接口指向实现类
                    MyPacketListener listener=new MyPacketListener();
                    xmppConnection.addPacketListener(listener, null);
                    xmppConnection.connect();
                    Log.i("多线程", Thread.currentThread().getId()+","+System.currentTimeMillis()+",连接成功");
                    
                    
                } catch (Exception e) {
                    e.printStackTrace();
                }finally
                {
                    Log.i("多线程", Thread.currentThread().getId()+","+System.currentTimeMillis()+",notify");

                    //对象锁
                    synchronized (TApplication.objlock) {
                        TApplication.objlock.notify();
                    }
                }
                
            };
        }.start();

在多线程运行时,先运行application的oncrete中主线程,然后开始登陆,此时判断工作线程资源是否存在,如果没有存在调用wait方法等待,

然后,通过调用notify方法,停止等待,进行登录



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值