java中的多线程

什么是多线程

       1. 如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”

       2. 多个线程交替占用CPU资源,而非真正的并行执行

多线程的优点

       1. 充分利用CPU的资源

        2.简化编程模型

        3.带来良好的用户体验

创建多线程的三种方法

·       1.继承 java.lang.Thread                       重写void run ()方法

public class My_Thread extends Thread{
	public void run() {
		for(int i = 0;i<10;i++) {		
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();				
			}			
		System.out.println("你好,来自线程"+Thread.currentThread().getName()+i);
		}
		}
}

        2.实现 java.lang .Runnable接口           重写void run ()方法

public class MyRunnable implements Runnable {

	
	public void run() {
		for(int i = 0;i<10;i++) {
			
		System.out.println(i+"你好,来自线程"+Thread.currentThread().getName());
		try {
			Thread.sleep(200);
		} catch (InterruptedException e) {

			e.printStackTrace();
		}
		}
		}
    public static void main(String[] args) throws InterruptedException {
		MyRunnable myRunnable = new MyRunnable();
		Thread t1 = new Thread(myRunnable);
		Thread t3 = new Thread(myRunnable,"a");
		Thread t2 = new Thread(myRunnable);
		
		t1.start();	
	
		t2.start();	
		
		t3.start();
		
		
	}

}

        3.实现Callable接口                               重写Object call()方法

public class MyCallable implements Callable {

	@Override
	public Object call() throws Exception {
		for(int i = 0;i<20;i++) {
			System.out.println("你好,来自线程"+Thread.currentThread().getName());
			}
		return null;
	}
public class three {

	public static void main(String[] args) {
		MyCallable  myCallable = new MyCallable();
		FutureTask ft = new FutureTask(myCallable);
		Thread th = new Thread(ft);
		th.start();
		FutureTask ft1 = new FutureTask(myCallable);
		Thread th1 = new Thread(ft1);
		th1.start();
	}

}
	
}

创建线程的思路

        1.创建线程类MyThread,并继承Thread

        2.重写Thread类中的run()方法,编写方法体        

        3.在测试类Test类中创建两个MyThread类的线程对象

        4.调用start()方法启动

        5.运行程序,观察多个线程交替执行的结果

线程的5种状态

        创建状态(new对象时)

        就绪状态(.start()时)

        阻塞状态  (阻塞结束进入就绪状态,执行sleep()或者join()进入阻塞)

        运行状态(执行run()方法)

        死亡状态 (run()方法执行结束)

线程方法:

        setPriority          设置线程优先级1-10,默认5

        Thread.sleep      休眠当前线程,进入阻塞状态

        mythread.join     强制执行mythread线程,阻塞join所在线程

        Thread.yield       线程礼让,不会进入阻塞状态

        wait()                      暂停线程

        notify()                        唤起线程

线程安全 :

使用synchronized修饰的方法控制对类成员变量的访问

        访问修饰符 synchronized 返回类型 方法名(参数列表){……}

StringBuffer  和  StringBuilder  前者线程安全,后者非线程安全

你可能感兴趣的:(java,开发语言)