Android——多线程编程练习题

随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。

layout文件:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:paddingBottom="@dimen/activity_vertical_margin"
 7     android:paddingLeft="@dimen/activity_horizontal_margin"
 8     android:paddingRight="@dimen/activity_horizontal_margin"
 9     android:paddingTop="@dimen/activity_vertical_margin"
10     tools:context="com.hanqi.testapp2.PractiseActivity4"
11     android:orientation="vertical">
12
13     <TextView
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         android:id="@+id/tvw1"/>
17     <TextView
18         android:layout_width="match_parent"
19         android:layout_height="wrap_content"
20         android:id="@+id/tvw2"/>
21
22     <Button
23         android:layout_width="wrap_content"
24         android:layout_height="wrap_content"
25         android:id="@+id/btt1"
26         android:text="随机选择"
27         android:onClick="btn_onClick"/>
28 </LinearLayout>

java类:

  1 package com.hanqi.testapp2;
  2
  3 import android.os.Bundle;
  4 import android.support.v7.app.AppCompatActivity;
  5 import android.view.View;
  6 import android.widget.Button;
  7 import android.widget.TextView;
  8 import android.widget.Toast;
  9
 10 public class PractiseActivity4 extends AppCompatActivity {
 11
 12     TextView tvw1;
 13     Button btt1;
 14     TextView tvw2;
 15     @Override
 16     protected void onCreate(Bundle savedInstanceState) {
 17         super.onCreate(savedInstanceState);
 18         setContentView(R.layout.activity_practise4);
 19         tvw1 = (TextView)findViewById(R.id.tvw1);
 20         btt1 = (Button)findViewById(R.id.btt1);
 21         tvw2 = (TextView)findViewById(R.id.tvw2);
 22     }
 23     String c1 = "北京";
 24     String c2 = "上海";
 25     public void btn_onClick(View v)
 26     {
 27         //创建子线程1
 28        new Thread(){
 29            @Override
 30            public void run() {
 31                for (int i=0;i<20;i++)
 32                {
 33                    if(i%2==0)
 34                    {
 35                      c1="";
 36                    }
 37                    else
 38                    {
 39                      c1="北京";
 40                    }
 41                    runOnUiThread(new Runnable() {
 42                        @Override
 43                        public void run() {
 44                            tvw1.setText(c1);
 45                        }
 46                    });
 47                    //暂停
 48                    try {
 49                        Thread.sleep((int) (Math.random()*1000));
 50                    }
 51                   catch (Exception e)
 52                   {
 53
 54                   }
 55                }
 56                runOnUiThread(new Runnable() {
 57                    @Override
 58                    public void run() {
 59                        Toast.makeText(PractiseActivity4.this, c1 + "循环完成", Toast.LENGTH_SHORT).show();
 60                    }
 61                });
 62            }
 63        }.start();
 64         //创建子线程2
 65         new Thread(){
 66             @Override
 67             public void run() {
 68                 for (int i=0;i<20;i++)
 69                 {
 70                     if(i%2==0)
 71                     {
 72                         c2="";
 73                     }
 74                     else
 75                     {
 76                         c2="上海";
 77                     }
 78                     runOnUiThread(new Runnable() {
 79                         @Override
 80                         public void run() {
 81                             tvw2.setText(c2);
 82                         }
 83                     });
 84                     //暂停
 85                     try {
 86                         Thread.sleep((int) (Math.random()*1000));
 87                     }
 88                     catch (Exception e)
 89                     {
 90
 91                     }
 92                 }
 93                 runOnUiThread(new Runnable() {
 94                     @Override
 95                     public void run() {
 96                         Toast.makeText(PractiseActivity4.this, c2 + "循环完成", Toast.LENGTH_SHORT).show();
 97                     }
 98                 });
 99             }
100         }.start();
101     }
102
103 }

随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。

时间: 2024-10-20 22:01:47

Android——多线程编程练习题的相关文章

Android多线程编程(一)——多线程基础

什么是进程 一个进程是一个独立(self contained)的运行环境,它可以看作一个程序或者一个应用. 什么是线程 而线程是进程中执行的一个任务,Java运行环境是一个包含了不同累和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源. Android线程 Android的线程,实际上和Java的多线程编程并没有什么本质上的不同.当我们需要执行一些耗时操作,比如说发起一条网络请求时,考虑到网速等其他原因,服务器未必会立刻响应我们的请求,如

Android多线程编程之线程池学习篇(一)

Android多线程编程之线程池学习篇(一) 一.前言 Android应用开发中多线程编程应用比较广泛,而应用比较多的是ThreadPoolExecutor,AsyncTask,IntentService,HandlerThread,AsyncTaskLoader等,为了更详细的分析每一种实现方式,将单独成篇分析.后续篇章中可能涉及到线程池的知识,特此本篇分析为何使用线程池,如何使用线程池以及线程池的使用原理. 二.Thread Pool基础 进程代表一个运行中的程序,一个运行中的Android

android: 多线程编程基础

9.1   服务是什么 服务(Service)是 Android 中实现程序后台运行的解决方案,它非常适合用于去执行那 些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使 当程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行. 不过需要注意的是,服务并不是运行在一个独立的进程当中的,而是依赖于创建服务 时所在的应用程序进程.当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停 止运行. 另外,也不要被服务的后台概念所迷惑,实际上服务并不会

Android多线程编程方法及开启步骤

作者:华清远见讲师 实现线程的两种方式 使用继承的方法 class MyThread extends Thread{ @Override public void run(){ //处理具体的逻辑 } } 要启动这个线程,在主线程中新建一个该实例,调用其start()方法即可. 使用实现Runnable借口的方式 class MyThread implements Runnable{ @Override public void run(){ //处理具体的逻辑 } } 开启现成时,使用: MyTh

Android 多线程编程初探

Android 中的多线程其实就是 JavaSE 中的多线程,只是为了方便使用,android 封装了一些类,如 AsyncTask.HandlerThread 等,在日常的开发过程中,我们往往需要去执行一些耗时的操作,例如发起网络请求,考虑到网速等其他外在的因素,服务器可能不会立刻响应我们的请求,如果不将这条操作放到子线程中去执行,就会造成主线程被阻塞,今天我们就从多线程的基础来一起探讨 一.线程的基本用法   对于 Andorid 多线程来说我们最新接触到的就是 Thread 和 Runna

android ——多线程编程

1.定义一个线程只需要新建一个类继承自Thread.然后重写run()方法,并在里面编写耗时逻辑即可: class MyThread extends Thread{ public void run(){ //处理具体的逻辑 } } 启动的时候只需要new出MyThread的实例,然后调用它的start()方法,这样run()中写的代码就会在子线程中进行: new Mythread().start(); 2.更多时候使用实现Runnable接口的方式来定义一个线程 class MyThread i

Android多线程编程

一.线程的三种使用方法 1.新建一个类继承自Thread,然后重写父类的run()方法,在run()方法中编写耗时逻辑,如下所示: class MyThread()extends Thread{ @Override public void run(){ //耗时操作 } } 开启这个线程的方法:new出这个MyThread类的实例,调用strart()方法,new  MyThread().start() 2.新建一个类实现Runnable接口的方式定义一个线程,如下所示: class MyThr

Android开发实践:多线程编程小结

我们知道,Android系统为了提高程序的实时响应能力,不允许在UI线程中进行耗时的操作,否则会出现ANR异常,因此必须将耗时的任务放到非UI线程中执行.Android/Java提供了很多类来帮助大家完成异步操作,比如:Thread类,Timer类,AsyncTask类,HandlerThread类,以及Executor接口.这些类都分别在什么场合下使用呢? 本文简单地总结一下Android开发中常见的多线程类型和解决方案,并比较和分析了各个方案的区别,以便更好地理解和应用这些API接口. 1.

Android 并发编程:(一)基础知识 —— 架构和组件

本章节所有内容皆为原创,如需转载,请注明出处. http://blog.csdn.net/manoel/article/details/38462631 写在前面的话 很久没写博客了,一是因为自身水平有限,怕误人子弟:二是因为感觉没什么可写的:三是因为时间有限,要寻找工作.学习和生活之间的平衡. 最近一直在研究和梳理Android多线程编程的东西,希望能够把这些分享给大家. 想必做过Android应用开发的同学应该都会知道,多线程是一个特别"诡异"的地方.之所以称为"诡异&q