zoukankan      html  css  js  c++  java
  • java多线程

    java多线程

    基础概念:

    1.多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。

    2.进程:包含由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立存在,他必须是进程的部分,一个进程一直运行,直到所有的非守护线程结束才终结。

    一个线程的生命周期

    线程也有一个从产生到死亡的过程。

     

    线程的优先级

    线程的优先级是一个Int类型的整数(1-10),线程级别越大,执行越优先,但是并不能保证执行顺序

    创建一个线程

    (1)实现Runnable接口

    (2)继承Thread类

    (3)通过callable和Future创建线程

    实现Runnable接口

    package com.cesec.utils.test;
    
    /**
     * Created by Administrator on 2018/1/6.
     */
    public class RunnableTest1 {
        public static void main(String[] args){
            RunnableDemo demo1 = new RunnableDemo("线程1");
            demo1.start();
            RunnableDemo demo2 = new RunnableDemo("线程2");
            demo2.start();
        }
    
    
    }
    
    class RunnableDemo implements Runnable{
        private String ThreadName;
        private Thread t;
    
        RunnableDemo(String ThreadName){
            this.ThreadName = ThreadName;
            System.out.println("creating  " + ThreadName);
        }
    
    
        @Override
        public void run() {
            System.out.println("Running " + ThreadName);
            try {
                for (int i = 4; i > 0; i--) {
                    System.out.println("Thread" + ThreadName + ":" + i);
                    Thread.sleep(50);
                }
            }catch (InterruptedException e){
                System.out.println("Thread:" + ThreadName + "interrupt");
            }
            System.out.println("Thread " + ThreadName + "exiting");
        }
    
        public void start(){
            System.out.println("Starting " + ThreadName);
            if(t == null){
                t = new Thread(this, ThreadName);
                t.start();
            }
        }
    }

    通过继承Thread方法来实现创建线程 

    Thread方法

    • start:jvm调用该线程的run方法
    • run:

    通过Callable和Future创建线程

    //callable类似于runnable,call类似于run方法,但是callable有返回值,call本身就有回复的功能
    public
    class CallableTest { public static void main(String[] args){ CallableDemo callableDemo = new CallableDemo(); try { String a = (String) callableDemo.call(); System.out.println(a); }catch (Exception e){ e.printStackTrace(); } } } class CallableDemo implements Callable{ @Override public Object call() throws Exception { System.out.println("this is work"); return "线程工作了"; } }

     FtureTask类似于Thread,但是是有返回值的,但是使用get()可以获得返回值

  • 相关阅读:
    冒泡排序(C#实现)
    CLR 学习笔记:程序集加载和反射(3)
    CLR 学习笔记:程序集加载和反射(2)
    CLR 学习笔记:程序集加载和反射(1)
    Effective C#:使用Conditional特性而不是#if条件编译
    Effective C#:推荐使用is或as操作符而不是强制类型转换
    基于线性探测法的散列表
    红黑树-算法四 实现
    二叉树的中序遍历的思想
    二叉树的删除操作-java
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/8214594.html
Copyright © 2011-2022 走看看