zoukankan      html  css  js  c++  java
  • 线程的使用方法start run sleep join

    今天回顾了Java的线程的一些知识

    例1:下面代码存有详细的解释 主要是继承Thread类与实现Runnable接口 以及start()和run()方法

    package com.date0607;

    /**
    * 在一个程序中同时运行的多个独立流程,每一个独立流程就是一个线程。
    * 线程开发两种方式:继承Thread类与实现Runnable接口.
    * start() 执行是无序的,不固定的。run() 执行有先后顺序。
    * 继承Thread是面向对象的编程方式。
    * 实现Runnable接口解决了单一继承限制
    */
    class MyThread1 extends Thread{
    public void run() {
    for (int i = 1; i <= 5; i++){
    System.out.println(i + " $$$");
    }
    }
    }
    class MyThread2 extends Thread{
    public void run(){
    for (int i = 1; i <= 5; i++){
    System.out.println(i + " ###");
    }
    }
    }

    class MyRunnable2 implements Runnable{
    public void run(){
    for (int i = 1; i <= 5; i++){
    System.out.println(i + " @@@");
    }
    }

    }
    public class Test_0607_Demo01 {
    public static void main(String [] args){
    Thread t1 = new MyThread1();
    Thread t2 = new MyThread2();
    Runnable target = new MyRunnable2();
    Thread t3 = new Thread(target);
    //初始状态
    //t1.start();
    //t2.start();
    //运行状态
    t1.run();
    t2.run();
    t3.run();
    }
    }
    运行结果 自己执行试试哦


    例2 sleep()方法,1000是1秒
    package com.date0607;

    /**
    * sleep()可以控制下线程,但是不准备。
    * sleep(1000) 10001s
    */

    class MyThread3 extends Thread{
    public void run(){
    for (int i = 1; i <= 5; i++){
    System.out.println(i + " ###");
    }
    try{
    Thread.sleep(20000);
    }catch (InterruptedException e){}
    }
    }

    class MyRunnable3 implements Runnable{
    public void run(){
    for (int i = 1; i <= 5; i++){
    System.out.println(i + " @@@");
    }
    try{
    Thread.sleep(20000);
    }catch (InterruptedException e){}
    }

    }
    public class Test_0607_Demo02{
    public static void main(String [] args){
    Thread t2 = new MyThread3();
    Runnable target = new MyRunnable3();
    Thread t3 = new Thread(target);
    t2.run();
    t3.run();
    }
    }
    运行结果 等待20秒,执行下一个线程

     

    例3 join()的使用方法

    package com.date0607;

    /**
    *join方法也会导致阻塞。
    * 特点:如果当前线程中掉用了另外一个线程的join方法,当前线程会立即阻塞,直到另外一个线程执行完成。
    */

    class MyThread33 extends Thread{
    public void run(){
    for (int i = 1; i <= 5; i++){
    System.out.println(i + " ###");
    }
    }
    }

    class MyThread44 extends Thread{
    Thread t;
    public void run(){
    try{
    t.join();
    }catch (InterruptedException e){}
    for (int i = 1; i <= 5; i++){
    System.out.println(i + " @@@");
    }
    }

    }
    public class Test_0607_Demo03{
    public static void main(String [] args){
    MyThread33 t1 = new MyThread33();
    MyThread44 t2 = new MyThread44( );
    t2.t= t1;
    t1.start();
    t2.start();
    }
    }
    运行结果
     
     


  • 相关阅读:
    Java Gradle
    C/C++ C++11新特性
    C/C++ C++11原子类型和内存序
    基于流的编程(Flow-Based Programming)
    算法和数据结构 筛法求素数
    数据库 悲观锁和乐观锁
    数据库 事务隔离级别
    Serverless 的 AI 写诗,程序员浪漫起来谁能顶得住啊!
    亮点前瞻 | 首届 ServerlesssDays · China 大会议程发布
    腾讯云云函数 SCF Node.js Runtime 最佳实践
  • 原文地址:https://www.cnblogs.com/zhishifx/p/9151900.html
Copyright © 2011-2022 走看看