多线程编程--两个城市去旅游

package com.example.wang.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Random;

public class ZuoyeActivity extends AppCompatActivity {

    Button bt_1;
    int j=1;
    int k=1;
    TextView tv_1;
    TextView tv_2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zuoye);

        bt_1=(Button)findViewById(R.id.bt_1);
        tv_1=(TextView)findViewById(R.id.tv_1);
        tv_2=(TextView)findViewById(R.id.tv_2);

        bt_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                j=k=1;

                TestThread t1 = new TestThread();
                t1.start();
                Toast.makeText(ZuoyeActivity.this, "t1运行", Toast.LENGTH_SHORT).show();
                Log.e("TAG","t1运行");

                TestThread1 t2 = new TestThread1();
                t2.start();
                Toast.makeText(ZuoyeActivity.this, "t2运行", Toast.LENGTH_SHORT).show();
                Log.e("TAG", "t2运行");

            }
        });
    }
class TestThread extends Thread
    {

        Random random=new Random();

        public void run()
        {
            for (int i=0;i<10;i++)
            {
                On();
            }
        }
    }
    public  void On()
    {
        Random random=new Random();

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                tv_1.setText("上海"+j);
                  j++;
            }
        });

        try
        {
            int t=random.nextInt(1000);
            Thread.sleep(t);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv_1.setText("");
            }
        });

        try
        {
            int t=random.nextInt(1000);
            Thread.sleep(t);
            Log.e("TAG", "t=" +t );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

class TestThread1 extends Thread
    {
        Random random=new Random();

        public void run()
        {
            for (int i=0;i<10;i++)
            {
                On1();
            }
        }
    }
    public  void On1()
    {
        Random random=new Random();

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv_2.setText("北京"+k);

                k++;
            }
        });

        try
        {
            int t=random.nextInt(1000);
            Thread.sleep(t);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv_2.setText("");
            }
        });
        try
        {
            int t=random.nextInt(1000);
            Thread.sleep(t);
            Log.e("TAG", "t=" +t );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }
}

java

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.wang.myapplication.ZuoyeActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="#ccc"
        android:textSize="20sp"
        android:gravity="center"
        android:id="@+id/tv_1"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="#cba"
        android:textSize="20sp"
        android:gravity="center"
        android:layout_marginTop="5dp"
        android:id="@+id/tv_2"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="去哪旅游"
        android:id="@+id/bt_1"
        android:onClick="bt_1"/>

</LinearLayout>

xml

时间: 2025-01-09 13:39:57

多线程编程--两个城市去旅游的相关文章

Java 多线程编程两个简单的例子

/** * @author gao */ package gao.org; public class RunnableDemo implements Runnable{ @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<10;i++){ System.out.println("新线程输出:"+i); } } public static void main(String []

Java 多线程编程两个简单的样例

/** * @author gao */ package gao.org; public class RunnableDemo implements Runnable{ @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<10;i++){ System.out.println("新线程输出:"+i); } } public static void main(String []

C++11多线程编程-两个进程轮流打印1~100

这是经典的同步互斥问题, 遵循原则: 1.条件变量需要锁的保护:2.锁需要条件变量成立后,后重新上锁: 参考代码: //notify_one()(随机唤醒一个等待的线程) //notify_all()(唤醒所有等待的线程) //Create [email protected] 2019/09/10 #include <bits/stdc++.h> #include <mutex> #include <thread> #include <condition_vari

delphi之多线程编程(尚未学习)

本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅.所有代码均亲自测试 delphi7下测试有效.图片均为自己制作. 多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以仅仅是看上去会一些,明白了2+2的时候,其实我还不知道1+1. 开始本应该是一篇洋洋洒洒的文字, 不过我还是提倡先做起来, 在尝试中去理解.先试试这个:  procedure TForm1.Button1Click(Sender: TObject); var   i: Integer; begin 

delphi 多线程编程

开始本应该是一篇洋洋洒洒的文字, 不过我还是提倡先做起来, 在尝试中去理解.先试试这个: procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to 500000 do begin Canvas.TextOut(10, 10, IntToStr(i)); end; end; 上面程序运行时, 我们的窗体基本是 "死" 的, 可以在你在程序运行期间拖动窗体试试... Delphi

多线程编程核心技术总结(读周志明书籍的总结)

多线程编程核心技术总结 1.Java多线程基本技能 1.1进程和线程的概念: 进程是独立的程序,线程是在进程中独立运行的子任务. 1.2使用多线程 1.2.1实现方法:继承Thread类,重写Runnable接口. 1.2.2线程安全问题:并发修改公共的实例变量,i++,i-- 1.3线程Thread类的一些方法: currentThread() 放回代码段正在被那个线程调用 isAlive() 判断线程是否处于活动状态 sleep() 使得当前线程退出CPU片段,等待获取锁 1.4停止线程 1

多线程编程(进程和线程)

多线程编程(进程和线程) 1.进程:指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程可以启动多个线程. 2.线程:指程序中一个执行流程,一个进程中可以运行多个线程. 一.创建线程(两种方式) 二.线程的5种状态( New,Runnable,Running,Block,Dead ): 三.线程的优先级 四.守护线程 /精灵线程/后台线程 五.方法 六.同步代码锁(synchronized) 一.创建线程(两种方式): 方式1:采用继承Thread的方法 第一,继承 Thre

iOS多线程编程

1. 进程,线程, 任务 进程:一个程序在运行时,系统会为其分配一个进程,用以管理他的一些资源. 线程:进程内所包含的一个或多个执行单元称为线程,线程一般情况下不持有资源,但可以使用其所在进程的资源. 任务:进程或线程中要做的事情. 在引入线程的操作系统中,通常把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位. 线程比进程更小,对其调度的开销小,能够提高系统内多个任务的并发执行程度. 一个程序至少有一个进程,一个进程至少有一个线程.一个程序就是一个进程,而一个程序中的多个任

多线程编程1-NSThread

前言 每个iOS应用程序都有个专门用来更新显示UI界面.处理用户触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行,多线程编程是防止主线程堵塞,增加运行效率的最佳方法. iOS中有3种常见的多线程编程方法: 1.NSThread 这种方法需要管理线程的生命周期.同步.加锁问题,会导致一定的性能开销 2.NSOperation和NSOperationQueue 是基于OC