多线程
多线程的产生
-
继承Thread类
-
实现Runable接口
-
使用ExecutorService、Callable、Future实现有返回结果的多线程。
-
继承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();
-
实现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+" "); } } } }
-
实现Callable接口
-
线程池
多线程实现资源共享
资源共享通过相同的对象实现。对象实现所指向位置唯一,从而实现资源共享。
静态 则是类实现。静态类无对象,所有的都通过类调用
死锁的产生与避免
死锁的产生:竞争统一资源,而又不释放自身资源,从而导致双方都不能运行,从而产生死锁。
线程存在的五种状态:
创建状态
就绪状态
运行状态
阻塞状态
死亡状态
Thread th1=new Thread(类对象);//创建状态 th1.start();//就绪状态 在类方法类中:{ public void run();//运行状态 } Thread.wait();//阻塞状态 需要唤醒 th1.destroy()//死亡状态
使用同步代码块,确定共有资源的使用。
多线程实现同步代码块
同步代码块 synchronized(){}
锁住:对象 类 共享资源(必须是类对象)
同步方法 Public synchronize void test(){}