首页 > 其他分享 >多线程1

多线程1

时间:2023-04-03 21:25:34浏览次数:30  
标签:Thread void 线程 println new 多线程 public

Thread

 

    //继承Thread类,重写run方法,调用start开启线程
//注意:线程开启不一定立即执行,由CPU调度执行
public class Demo01 extends Thread{
//
   public void run(){
       for (int i = 0; i < 20; i++) {
           System.out.println("我在看代码==>"+i);
      }
  }

   //main主线程
   public static void main(String[] args) {

       //创建一个线程对象
       Demo01 demo01 = new Demo01();
       //使用start方法调用线程
       demo01.start();
       // demo01.run();

       for (int i = 0; i < 500; i++) {
           System.out.println("我是主线程==>"+i);
      }
  }

}

用多线程下载图片

public class TestThread2 extends Thread{
   private String url;
   private String name;
   public TestThread2(String url,String name){
       this.name=name;
       this.url=url;

  }

   @Override
   public void run() {
       webDownloader webDownloader=new webDownloader();
       webDownloader.downloader(url,name);
       System.out.println("下载了文件名为"+name);
  }

   public static void main(String[] args) {

       TestThread2 testThread2 = new TestThread2("https://ts1.cn.mm.bing.net/th/id/R-C.0c757425c6e862321a280837dda08790?rik=BH0qYpmCKEQsZA&riu=http%3a%2f%2fwww.jzrb.com%2ftxy%2fupload%2f2013331102535.JPG&ehk=%2fzW3AETujwc1zgsFpavomYx88LhXWN7ZF7qlyebkoxg%3d&risl=&pid=ImgRaw&r=0","1.jpg");
       testThread2.start();

  }

}

class webDownloader{

   public void downloader(String url,String name){
       try {
           //下载图片的工具类FileUtils.copyURLToFile
           FileUtils.copyURLToFile(new URL(url),new File(name));
      } catch (IOException e) {
           System.out.println("io异常,方法出现问题");
      }
  }
}

Runnable

//创建线程方式2,实现runnable接口,重写run方法
public class TestRunnable implements Runnable {
   @Override
   public void run() {
       for (int i = 0; i < 20; i++) {

           System.out.println("我是子线程!!!"+i);
      }
  }

   public static void main(String[] args) {
       //创建runnable接口的实现类对象
       TestRunnable testRunnable = new TestRunnable();
       //创建线程对象,通过线程对象来开启我们的线程,代理
       new Thread(testRunnable).start();

       for (int i = 0; i < 500; i++) {
           System.out.println("我是主线程"+i);
      }
  }
}

龟兔赛跑

Thread.sleep 让线程睡眠

public class Race implements Runnable{
  private static   String winner;
   @Override
   public void run() {

       for (int i = 0; i <= 100; i++) {
           if (Thread.currentThread().getName().equals("兔子")&&i%10==0){
               try {
                   Thread.sleep(1);
              } catch (InterruptedException e) {
                   throw new RuntimeException(e);
              }
          }
           boolean f=gameOver(i);
           if (f){break;}
           System.out.println(Thread.currentThread().getName()+"=====》跑了"+i+"步");
      }

  }
   public boolean gameOver(int steps){
       if (winner!=null){
           return true;
      }else {
           if (steps>=100) {
               winner=Thread.currentThread().getName();
               System.out.println("Winner is " + winner);
               return true;
          }
      }
       return false;
  }
   public static void main(String[] args) {
       Race race=new Race();
       new Thread(race,"兔子").start();
       new Thread(race,"乌龟").start();
  }
}

静态代理模式

public class DaoLi {

   /*
   真实对象和代理对象都要实现同一个接口
   代理对象要代理真实角色

   代理的好处:代理对象可以左很多真实对象做不了的事情,真实对象可以专注做自己的事情
   * */
   public static void main(String[] args) {
       new Hqgs(new You()).HappyMarry();

       new Thread(()-> System.out.println("你好呀")).start();
  }
}

//结婚
interface Marry{
   void HappyMarry();
}
//我
class You implements Marry{

   @Override
   public void HappyMarry() {
       System.out.println("结婚啦,真开心");
  }
}

//代理类
class Hqgs implements Marry{
private You you;

   public Hqgs(You you) {
       this.you = you;
  }

   @Override
   public void HappyMarry() {
       HunQian();
       you.HappyMarry();
       HunHou();
  }

   private void HunHou() {
       System.out.println("婚后,收尾款");
  }

   private void HunQian() {
       System.out.println("婚前,布置现场");
  }
}

性能的优先级

//默认优先级都是相同
//设置优先级
TestRunnable testRunnable = new TestRunnable();

Thread t1=new Thread(testRunnable);
ti.setPriority(10);   //10是最高 1是最小 优先级高的就先运行

 

守护线程

线程分为用户线程和守护线程

虚拟机必须保证用户线程执行完毕,但不用等待守护线程执行完毕

.setDeamon

public class TestDeamon {
   public static void main(String[] args) {
       God god=new God();
       You1 you1=new You1();

       Thread thread=new Thread(god);
       thread.setDaemon(true);  //设置成为守护线程
       thread.start();


       new Thread(you1).start();
  }
}

class You1 implements Runnable{
   @Override
   public void run() {
       for (int i = 0; i < 36500; i++) {
           System.out.println("开心的活了每一天===");
      }
       System.out.println("goodbey world!==============");
  }
}
class God implements Runnable{
   @Override
   public void run() {
       while (true){
           System.out.println("上帝守护着你");
      }
  }
}
 

 

标签:Thread,void,线程,println,new,多线程,public
From: https://www.cnblogs.com/wukangxiang/p/17284492.html

相关文章

  • 多线程2
    Join//join线程强制执行(插队)publicclassTestJoinimplementsRunnable{  @Override  publicvoidrun(){    for(inti=0;i<100;i++){​      System.out.println("我是vip==》"+i);   } }​  publicstaticvoidmain(......
  • 多线程同步与安全
    三大不安全线程//模拟不安全的买票publicclassTestBuyTicket{  publicstaticvoidmain(String[]args){    maiPiaomaiPiao=newmaiPiao();​    newThread(maiPiao,"小明").start();    newThread(maiPiao,"小红").start();    ne......
  • Java多线程
    1.可见性、原子性和有序性问题多线程有三大特性,分别是可见性、原子性和有序性。1.1可见性  在单核时代,所有的线程都是在一颗CPU上执行,CPU缓存与内存的数据一致性容易解决。因为所有线程都是操作同一个CPU的缓存,一个线程对缓存的写,对另外一个线程来说一定是可见的。一个线程......
  • Python 多线程死循环挂服务器时CPU占用过高问题
    我的某个程序里有这样一段代码,把程序挂在服务器爬取信息,因此用到死循环,同时又需要进行三个任务,于是使用了多线程。刚开始在死循环部分并没有加time.sleep(60),于是它一直在for循环,同时会进行.is_alive()(不确定这个消耗大不大),但总之这使得CPU占用过高。而加上sleep之后,直接就降下......
  • 多线程
    内容什么是线程如何创建线程线程的调度线程的一个设计模式:生产消费者模型线程池线程集合对象(侧重点)一、什么是线程进程:运行中的程序才可以称为进程,一个程序一个进程。宏观并行,微观串行。线程:1.任何一个程序都至少拥有一个线程,即主线程。但是java程序默认有两个线......
  • Java多线程(一篇从0讲透)
    多线程思维导图看天下:1.概述并行与并发并行:指两个或多个事件在同一时刻发生(同时发生)并发:指两个或多个事件在同一个时间段内发生。(交替执行)线程与进程进程:是指一个内存中运行的程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程记忆:进程的英文......
  • 多线程相关的问题(面试)
    1、线程创建的方式有哪几种1、继承Thread类;2、实现Runnable接口;3、实现Callable接口;4、使用Executor工具类创建线程池;5;使用ThreadPoolExecutor工具类创建线程池。2、线程的5种状态流转线程的状态如下状态:新建、就绪、运行、【阻塞】(等待(时间片用尽)、主动等待、挂起)、......
  • 结合 操作系统、Java多线程 学习并发编程
    为什么我们需要考虑并发?不考虑的话会出现什么问题?并发的多个程序(进程/线程)会对计算机资源进行争夺,如果不加以控制会出现混乱、严重影响程序运行效率,甚至错误首先是对CPU时间片的争夺对于多线程编程而言,由于创建线程后,线程的执行顺序是由调度程序控制的,也就是说各个线程的执行顺......
  • 多线程简介以及线程同步
    1.实现多线程1.1简单了解多线程【理解】是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。1.2并发和并行【理解】并行:在同一时刻,有多个指令在多个CPU上同时执行。并发:在同一时刻,有多个指令......
  • c++ 多线程编程std::thread, std::shared_mutex, std::unique_lock
    在C++11新标准中,可以简单通过使用thread库,来管理多线程,使用时需要#include<thread>头文件。简单用例如下:1std::thread(Simple_func);2std::threadt(Simple_func);3t.detach();第一行是直接启动一个新线程来执行Simple_func函数,而第二行先声明一个线程函数t(返回类型为......