多线程

进程的概念:正在运行的程序,是系统进行资源分配和调用的独立单位,每一个程序都有它自己的内存空间和系统资源(我们的通过任务管理器就能看到进程的存在,只有运行的程序才有进程)


多线程:在同一个进程里面可以执行多个任务。而每一个任务可以看成一个线程。线程是 程序的执行单元,执行路径,是程序使用cpu的最基本单位。

单线程:如果程序只有一条执行路径。

多线程:如果程序有多条执行路径。

多线程的存在不是提高程序的速度,是提高程序的使用率


package com.demo;

import java.util.Date;

public class MyThread extends Thread {
  
	
//	getName()获取进程的名字;
	
  @Override
  public void run() {
	for (int i = 0; i <1000; i++) {
//		System.out.println(getName()+":"+i);
		System.out.println(getName()+"---"+new Date());
		try {
			Thread.sleep(1000);//每一个进程休眠1秒,一秒每个进程都跑了一次
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		/*Thread.yield();  线程礼让方法
		 暂停当前线程的执行,让其他的先执行后在自己执行,让多个线程执行更和谐,但不能做到你一次我一次
		 * */
	}
  }
}


package com.demo;

public class Test {
	public static void main(String[] args) {
		MyThread myThread = new MyThread();
		
		MyThread myThread2 = new MyThread();
		myThread.setName("线程一");//设置线程的名字,默认是Thread-0,累增
		myThread2.setName("线程二");
//		myThread.start();
//		myThread2.start();
		
		System.out.println(Thread.currentThread().getName());//得到当前线程的名字
		/*线程有两种调度模式
		1分时调度模型(比如一个线程先用五分钟接着另个线程用五分钟)
		2抢占式调度模型(优先级高的优先用CPU,相同随机,低的后用),
		线程级别是1~10,10最高,默认5
		*/
		System.out.println(myThread.getPriority());//获取线程的默认优先级,默认值是5
		myThread.setPriority(10);
		
		
		/**
		 * join的使用,等待某个线程结束了,其他的线程才能走
		 */
		
		myThread.start();
		try {
			myThread.join();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		myThread2.start();//等myThread走完了myThread2才能开始跑
		
		/**
		 * setDaemon()方法设为守护线程,主线程跑完守护线程就结束,并不是立马结束,有自杀颤抖时间
		 */
		
		MyThread th1 = new MyThread();
		MyThread th2 = new MyThread();
		th1.setName("关羽");
		th2.setName("张飞");
		th1.setDaemon(true);//设置为守护线程
		th2.setDaemon(true);//设置为守护线程
		Thread.currentThread().setName("刘备");//主线程
		for (int i = 0; i < 5; i++) {
			System.out.println(i);
		}
		
		/**
		 * 中断线程
		 * th1.stop();停止线程,不建议使用方法过时了,但还可以用
		 * th1.interrupt();中断线程,把线程的状态终止,建议使用并抛出异常,异常走完后,后面的方法也会走完
		 * (run里的完整的方法走完后才终止线程,退出jvm)
		 */
		
		th1.interrupt();
	}

}


package com.demo;

public class MyRunable implements Runnable{

	@Override
	public void run() {
		for (int i = 0; i < 200; i++) {
			System.out.println(Thread.currentThread().getName()+"---"+i);
		}
		
	}

}


package com.demo;
/**
 * 线程实现方式2,实现接口runnable接口
 * @author anjin
 *
 */
public class MyRunableTest {
	public static void main(String[] args) {
		MyRunable myRunable = new MyRunable();//子类对象
		Thread th1 = new Thread(myRunable);//线程1
		Thread th2 = new Thread(myRunable);
		th1.setName("线程1");
		th2.setName("线程2");
		th1.start();
		th2.start();
		
	}

	

}








线程池:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值