5.19多线程

package org.westos.多线程博客练习;
/**
 * 	进程:系统可以进行独立调配并且是一个不可分割 独立单元
	开启一个任务管理器,很多进程(应用软件/某些客户端)

	什么是多进程?
		多进程的意义:是为了提高CPU的使用率
		现在计算机都是多进程,假设:在听音乐的同时,也在打游戏..,他们是同时进行的吗?
			他们不是同时进行的,感觉同时,一点点CPU的时间片在同一个时刻在两个进程之间进行高效的切换!
		
	什么线程?
		线程:进程的一个独立的单元
		一个进程里面有多个任务,把每一个任务看成一个线程
	多线程:
		线程之间在抢占CPU的执行权(抢占资源)
			多线程的执行具有随机性
 * */
/**
 * 如何实现多线程程序呢?
 * 要实现多线程程序,需要开启进程,
 * 开启进程,是需要创建系统资源,但是Java语言不能创建系统资源
 * 只有C/C++可以创建系统资源, 利用c语言创建好的系统资源实现
 * Java提供了一个类:Thread类
 *		实现多线程程序的步骤:
 *		1)将类声明为 Thread 的子类
 *		2)该子类应重写 Thread 类的 run 方法
 *		3)在主线程进行该自定义的线程类的对象的创建
 *
 *
 *
 * 并行和并发(高并发:MyBatis --->IBatis:半自动化)
 * 强者逻辑上的同时,指的是同一个时间段内
 * 后者物理上的同时,指的是同一个时间点
 * Thread 类提供了一些方法
 *		public final void setName(String name):给线程起名称
 *		public final String getName() :获取线程名称
 *		Thread.currentThread()返回当前正在执行的线程
 * */

public class Text1 {
	public static void main(String[] args) {
		MyThread t1 = new MyThread();
		t1.setName("线程1");
		//可以将线程名字写在构造方法中,前提是我们在自定义的线程类中提供了有参构造
		MyThread t2 = new MyThread("线程2");
		t1.start();
		t2.start();
		//线程1,2开始抢占资源
	}
}
package org.westos.多线程博客练习;
/**
 *public final void join():等待该线程终止 interruputedException 中断异常
 *
 *分别创建三个子线程,让第一个子线程执行之后,调用join()等待该线程中,在执行t2,t3线程
 */
public class Text2 {
	public static void main(String[] args) {
		MyThread t1 = new MyThread("线程1");
		MyThread t2 = new MyThread("线程2");
		MyThread t3 = new MyThread("线程3");
		t1.start();
		t2.start();
		try {
			t2.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		//当线程1,2执行完毕后再执行线程3
		t3.start();
	}
}
package org.westos.多线程博客练习;
/**
 * public static void yield()暂停当前正在执行的线程对象,并执行其他线程
 * 		写在Thread的子类中
 * public static void sleep(long millis):线程睡眠 指定是时间毫秒值
 * 两个区别?
	public final void stop() ;强迫线程停止执行。	不会执行了 (过时了),方法能使用的
	public void interrupt()中断线程。 表示中断线程的一种状态 
	面试题
		区别?
	wait(): wait()调用的,立即释放锁  (同步锁/Lock锁)
	sleep():	线程睡眠,调用不会释放锁
 * 
 *
 */
public class Text3 {
	public static void main(String[] args) {
		MyThread2 t1 = new MyThread2("线程1");
		MyThread2 t2 = new MyThread2("线程2");
		t1.start();
		t2.start();
		//线程1,2开始抢占资源,每个线程每秒执行一次,但是两个线程还是在抢占资源
	}
}
package org.westos.多线程博客练习;
/**
 * 线程的另一种创建方法:
 * 		应用了Thread的public Thread(Runnable target,String name)构造方法
 * 实现多线程程序的第二种方式:
 *		1)自定义一个类,实现Runnable接口
 *		2)实现接口中的run方法,对耗时的代码进行操作
 *		3)然后在主线程中创建该了对象,将该类对象做为一个资源类,创建Threadd类的对象,将刚才的资源类作为参数进行传递 
 * */
public class Text4 {
	public static void main(String[] args) {
		MyThread3 my = new MyThread3();
		Thread t1 = new Thread(my,"张三");
		Thread t2 = new Thread(my,"李四");
		t1.start();
		t2.start();
	}
}

Thread子类

package org.westos.多线程博客练习;

public class MyThread extends Thread {
	//无参构造
	public MyThread() {
		
	}
	//有参构造
	public MyThread(String name) {
		super(name);
	}

	@Override
	public void run(){
		for(int i= 0;i<100;i++) {
			System.out.println(getName()+"----"+i);
		}
	}
}
package org.westos.多线程博客练习;

public class MyThread2 extends Thread{
	//无参构造
	public MyThread2() {
		
	}
	//有参构造
	public MyThread2(String name) {
		super(name);
	}

	@Override
	public void run(){
		for(int i= 0;i<100;i++) {
			System.out.println(getName()+"----"+i);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
package org.westos.多线程博客练习;

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

}






猜你喜欢

转载自blog.csdn.net/ws1995_java/article/details/80439858