黑马程序员——javaSE_多线程

------- android培训java培训、期待与您交流! ----------


进程:正在进行中的程序。其实进程就是一个应用程序运行时的内存分配空间。

线程:其实就是进程中一个程序执行控制单元,一条执行路径。进程负责的是应用程序的空间的标示。线程负责的是应用程序的执行顺序。

进程中最少有一个线程

多线程特性

1.随机性

2.谁强盗谁执行,至于执行多长,由CPU说了算

返回当前线程的名称:Thread.currentThread().getName()

线程的名称是由:Thread-编号定义的。编号从0开始。

线程要运行的代码都统一存放在了run方法中。

线程要运行必须要通过类中指定的方法开启。start方法。(启动后,就多了一条执行路径)

start方法:1)、启动了线程;2)、让jvm调用了run方法。

创建线程的第一种方式:继承Thread ,由子类复写run方法

public class Test {
	public static void main(String[] args) {
		MyThread t = new MyThread();
		t.start();
	}

}
class MyThread extends Thread{
	public void run(){
		for(int x = 1;x<=100;x++){
			System.out.println(x);
		}
	}
}
创建线程的第一种方式:实现Runnable接口,实现run方法

实现方式的好处:避免了单继承的局限性

public class Test {
	public static void main(String[] args) {
		MyThread m = new MyThread(); //创建该对象
		Thread t = new Thread(m);//建立Thread对象把实现了Runnable接口的对象以参数形式传入Thread构造函数中
		t.start();//调用start方法开启线程
	}

}
class MyThread implements Runnable{
	public void run(){
		for(int x = 1;x<=100;x++){
			System.out.println(x);
		}
	}
}

获取线程名称:getName();  Thread-编号  编号从0开始

多线程的安全问题

问题原因:当多个线程在操作同一个共享数据时,一个线程执行了一部分,还没执行,另一个线程参与进来了,导致数据的错误。

解决方法:对个线程操作共享的语句,只能让一个线程执行完,在执行的过程中,其他线程不可以参与进来执行。

java提供了解决多线程安全问题的方式,就是同步

好处:解决了线程安全问题。

弊端:相对降低性能,因为判断锁需要消耗资源,产生了死锁。

同步的前提
1.必须有两个以上的线程
2.必须是多个线程使用同一个锁
同步有三种
1.同步代码块,可以使用任意对象作为锁
2.同步函数,固定是this锁
3.静态同步函数,固定是所属类名.class
举例(多线程卖票例子)
public class Test {
	public static void main(String[] args) {
		Sell s = new Sell();
		Thread t1 = new Thread(s);
		Thread t2 = new Thread(s);
		t1.start();
		t2.start();
	}
}
class Sell implements Runnable{
	private int PI = 100;
	Object obj = new Object();
	public void run() {
		while(true){
			synchronized(obj){
				if(PI>0){
					System.out.println(Thread.currentThread().getName()+"..."+PI--);
				}
			}
		}
	}
}


线程间的通讯:就是多个线程在操作同一个资源,但是操作动作不同

wait和sleep的区别

wait:释放资源释放锁,必须要调用notify才能唤醒

sleep:释放资源不释放锁,可以定义时间,时间一到自动就醒了

停止线程
1.run方法结束
2.定义循环标记,让循环退出,让run方法结束
守护线程(setDaemon())
当进程中只剩下守护线程,该进程就结束退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值