Android中多线程简单使用(Thread)

1、 Android 中的多线程

在Android 开发中我们更新UI操作都是在UI线程(ActivityThread)中去操作的,并且不能执行耗时操作,所以这时候就用多到多线程。即创建新的线程去做一些耗时操作,比如网络请求。

2、 Android 中的多线程创建方式

创建线程有2中方式,一种实现Runnable 接口,一种继承Thread类

2.1、 实现Runnable 接口
class MyRunnable implements Runnable{

        @Override
        public void run() {
            Log.e("TAG","创建线程");
        }
    }
//调用启动线程
  MyRunnable myThread = new MyRunnable ();
   myThread .start();

可以简写成

  Thread thread3=new Thread(new Runnable() {
            @Override
            public void run() {
                Log.e("TAG","创建线程");
            }
        });
        thread3.start();
2.2、 继承Thread类
 class  Mythread extends Thread{
        @Override
        public void run() {
            super.run();
            Log.e("TAG","通过继承Thread类的方式去实现多线程");
        }
    }
//调用启动线程
Mythread myThread1=new Mythread();
        myThread1.start();

简写:

Thread thread4=new Thread(){
            @Override
            public void run() {
                super.run();
                Log.e("TAG","通过继承Thread类的方式去实现多线程");
            }
        };
        thread4.start();

3、 两种实现方式的区别

实现 Runnable 继承Thread
通过Runnable方式可以方便的实现资源共享 每个线程是相互独立的,不易实现资源共享
不需要继承的方式去实现,避免了单继承的缺陷 具有单继承的瑕疵
将自己实现的Runnable 接口传入Thread 中, 线程启动调用Runnable 接口中的run方法 Thread 本身已经实现Runnable 接口,通过继承重写的也是 runnable接口中的run方法

4、Runnable 接口方式实现多线程并发

老掉牙的问题,多窗口实现买票

class SellTicktDemo  implements Runnable{
		private int num=100;

		@Override
		public void run() {
			// TODO Auto-generated method stub
			
			while (num>0) {
			
				synchronized(this){
					num--;
					if(num<=0){
						System.out.println("所有窗口都没票了.......");
						return;
					}
					
					System.out.println("窗口"+Thread.currentThread().getName()+"售票剩余"+num);
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
				}
				
			}
			
		}
		
	}

//  开启多线程进行买票
public void sell(){
		SellTicktDemo std=new SellTicktDemo();
		 //把对象放入线程中
       Thread t1 = new Thread(std,"1");
       Thread t2 = new Thread(std,"2");
       Thread t3 = new Thread(std,"3");
       Thread t4 = new Thread(std,"4");
       t1.start();
       t2.start();
       t3.start();
       t4.start();
       
 
	}


各个窗口买票的情况如下:

窗口1售票剩余99
窗口1售票剩余98
窗口1售票剩余97
窗口1售票剩余96
窗口1售票剩余95
窗口1售票剩余94
窗口1售票剩余93
窗口1售票剩余92
窗口1售票剩余91
窗口1售票剩余90
窗口1售票剩余89
窗口4售票剩余88
窗口4售票剩余87
窗口4售票剩余86
窗口4售票剩余85
窗口4售票剩余84
窗口4售票剩余83
窗口4售票剩余82
窗口4售票剩余81
窗口4售票剩余80
窗口4售票剩余79
窗口4售票剩余78
窗口4售票剩余77
窗口4售票剩余76
窗口4售票剩余75
窗口4售票剩余74
窗口4售票剩余73
窗口4售票剩余72
窗口4售票剩余71
窗口4售票剩余70
窗口4售票剩余69
窗口4售票剩余68
窗口4售票剩余67
窗口4售票剩余66
窗口4售票剩余65
窗口4售票剩余64
窗口4售票剩余63
窗口4售票剩余62
窗口4售票剩余61
窗口4售票剩余60
窗口4售票剩余59
窗口4售票剩余58
窗口4售票剩余57
窗口4售票剩余56
窗口4售票剩余55
窗口4售票剩余54
窗口4售票剩余53
窗口4售票剩余52
窗口3售票剩余51
窗口3售票剩余50
窗口3售票剩余49
窗口3售票剩余48
窗口3售票剩余47
窗口3售票剩余46
窗口3售票剩余45
窗口3售票剩余44
窗口2售票剩余43
窗口2售票剩余42
窗口2售票剩余41
窗口2售票剩余40
窗口2售票剩余39
窗口2售票剩余38
窗口3售票剩余37
窗口3售票剩余36
窗口3售票剩余35
窗口3售票剩余34
窗口3售票剩余33
窗口3售票剩余32
窗口3售票剩余31
窗口3售票剩余30
窗口3售票剩余29
窗口3售票剩余28
窗口3售票剩余27
窗口3售票剩余26
窗口3售票剩余25
窗口3售票剩余24
窗口3售票剩余23
窗口3售票剩余22
窗口3售票剩余21
窗口3售票剩余20
窗口3售票剩余19
窗口3售票剩余18
窗口3售票剩余17
窗口3售票剩余16
窗口3售票剩余15
窗口3售票剩余14
窗口3售票剩余13
窗口3售票剩余12
窗口3售票剩余11
窗口3售票剩余10
窗口4售票剩余9
窗口4售票剩余8
窗口4售票剩余7
窗口4售票剩余6
窗口4售票剩余5
窗口4售票剩余4
窗口4售票剩余3
窗口4售票剩余2
窗口4售票剩余1
窗口4售票剩余0
所有窗口都没票了.......
所有窗口都没票了.......
所有窗口都没票了.......

发布了100 篇原创文章 · 获赞 75 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/baidu_31956557/article/details/98475636
今日推荐