zoukankan      html  css  js  c++  java
  • java多线程简单用法

    1、实现多线程-匿名内部类
    public class Test{
    public static void main(String[] args){
        new Thred(new Runnable(){
          @Override
          public void run(){
            System.out.println("hello word");
          }
        }).start();
      }
    }
    2、实现多线程-使用lamda
    public class Test{
    public static void main(String[] args){
    new Thred(()->System.out.println("Hello Word!")).start();
    }
    }
    在实际开发过程中,Runnable接口的子类的实现形式可能很少见,以上两种是最为常见的做法。

    Runnable中的run方法虽然也是线程的主方法,但是其没有返回值,因为它的设计遵循了主方法的设计原则:线程开始了就别回头。

    但是很多时候需要一些返回值,例如:当某些线程执行完成后有可能带来一些结果,这种情况下我们只能利用Callable来拿到返回值。


    不管何种情况,要想启动多线程只有Thread类的start()方法
    public class Test implements Callable<String>{

    @Override
    public String call() throws exception{
    for(int i=0;i<20;i++){
    System.out.println(i);
    }
    return "票卖完了,下次吧。。。";
    }

    publlic static void main(String[] args){
    FutureTask<String> task = new FutureTask<String>();
    new Thred(task).start();
    System.out.println(task.get());
    }
    }

    什么是进程?
    实际上每当使用了java命令去解释程序的时候,都表示启动了一个新的JVM进程。而主方法知识这个进程上的一个线程而已。
    JVM是一个进程,所有的主方法都是一个线程,由主线程创建所有的子线程


    线程休眠

    主方法只是一个中等优先级


    线程死锁:
    死锁一旦出现之后实际整个程序就将暂时性中断执行了,所以死锁属于一个严重性的问题,而这个出现的概率不高。
    那么在整体的感念理念:数据若果要想完整操作必须使用同步,但是过多的同步会造成死锁,没事干考虑好了再加同步。


    请解释sleep和wait的区别?
    1、sleep是Tread类中定义的方法,到了一定时间后休眠的线程可以自动唤醒
    2、wait()是Object类中定义的方法,如果想要唤醒,必须使用notify()、notifyAll()方法才可以唤醒。
    notify() 唤醒第一个等待线程
    notifyAll() 唤醒所有等待的线程,哪个优先级高,他就有可能先执行。

  • 相关阅读:
    开启linux服务器防火墙
    Linux系统编程11_管道和命名管道
    Lua语法
    Git学习
    Buildroot介绍
    Makefile基本介绍
    页、页表和块
    文件系统,根文件系统,MTD
    什么是ioctl
    bootargs的mtdparts解析
  • 原文地址:https://www.cnblogs.com/jiehanshi/p/10779614.html
Copyright © 2011-2022 走看看