2020-10-21 多线程

多线程

多线程的产生

  • 继承Thread类

  • 实现Runable接口

  • 使用ExecutorService、Callable、Future实现有返回结果的多线程。

  1. 继承Thread类: 继承类 重写run( )方法 创建线程(新生) 启动线程(就绪)

     public class MyThread extends Thread {
   public void run() {
    System.out.println("MyThread.run()");
   }
 }

在main方法中启动线程

 MyThread myThread1 = new MyThread();
 MyThread myThread2 = new MyThread();
 myThread1.start();
 myThread2.start();
  1. 实现Runable接口:实现接口,重写run( )方法 创建线程(新生) 启动线程(就绪)

 package com.lxj.juc;
  
 public class TestRunnable {
     public static void main(String[] args) {
         RunnableDemo runnableDemo = new RunnableDemo();
         new Thread(runnableDemo).start();
     }
 }
  
 class RunnableDemo implements Runnable{
     @Override
     public void run() {
         boolean flag = false;
         for(int i  = 3 ; i < 100 ; i ++) {
             flag = false;
             for(int j = 2; j <= Math.sqrt(i) ; j++) {
                 if(i % j == 0) {
                     flag = true;
                     break;
                 }
             }
             if(flag == false) {
                 System.out.print(i+"  ");
             }
         }
     }
     
 }
  1. 实现Callable接口

  2. 线程池

多线程实现资源共享

资源共享通过相同的对象实现。对象实现所指向位置唯一,从而实现资源共享。

静态 则是类实现。静态类无对象,所有的都通过类调用

死锁的产生与避免

死锁的产生:竞争统一资源,而又不释放自身资源,从而导致双方都不能运行,从而产生死锁。

线程存在的五种状态:

创建状态

就绪状态

运行状态

阻塞状态

死亡状态

 Thread th1=new Thread(类对象);//创建状态
 th1.start();//就绪状态
 在类方法类中:{
    public void run();//运行状态
 }
 Thread.wait();//阻塞状态 需要唤醒
 th1.destroy()//死亡状态

使用同步代码块,确定共有资源的使用。

多线程实现同步代码块

同步代码块 synchronized(){}

锁住:对象 类 共享资源(必须是类对象)

同步方法 Public synchronize void test(){}

猜你喜欢

转载自blog.csdn.net/xiaoliang98/article/details/109197731