多线程详解

我们先来看看什么是进程,进程就是指当前正在运行的程序,一个应用程序在内存中的执行区域;二线程:是指运行的一个程序,线程依赖于进程。进程中可以有一个或多个线程,但是单线程(单个执行)安全性高,效率低,多线程(多个同时执行)安全性低,效率高比如360、迅雷等就是一个多线程,

多线程的实现方式有两种:
1.是继承Thread类,并且重写run方法,分配并启动子类的实例并且线程具有随机性比如

public class MyThread extends Thread{
@Override
public void run() {
for(int i=0;i<100;i++) {
System.out.println(getName()+":"+i);
}
}
public class ThreadDemon1{

​ public static void main(String[] args){

​ //创建线程实例

​ MyThread mt=new MyThread();

​ //设置名字

​ mt.setName(“张三”);

​ //启动线程

​ mt.start();

​ //创建线程实例

​ MyThread mt1=new MyThread();

​ //设置名字

​ mt1.setName(“张三”);

​ //启动线程

​ mt1.start();

​ }

}

2.创建一个线程是声明实现类Runnable接口。 那个类(实现接口的类)然后实现了run方法。 然后可以分配类的实例,在创建Thread对象时作为参数传递,并启动;

还是以上面的为例加以改变

public class MyThread2 implements Runnable{
int num ;
public MyThread2(int num) {
this.num=num;
}

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

}

注意 不能直接获取getXxx()方法,则此时需要Thread currentThread().xxx返回对当前正在执行的线程对象的引用。

public class ThreadDemon2 {
public static void main(String[] args) {
//创建线程的实例
MyThread2 mt=new MyThread2(100);

//如果说只创建一个线程实例,那么它的成员都是共用这一个实例

​ Thread t=new Thread(mt);

	//启动线程
	t.setName("王五");
	t.start();

	Thread  t1=new Thread(mt);
	
	//启动线程
	t1.setName("丽萨");
	t1.start();
}

}

我在这推荐使用方式二,因为方式一中的继承只支持单一继承,具有一定的局限性

休眠线程:static Thread.sleep();

例如售卖火车票是,我们可以使用多个线程、休眠线程,由于多个线程并发的访问共享的数据,可能会出现一些小问题。这时我们可以使用锁对象来解决

synchronized: 同步,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他的线程将无法访问;也可以作为修饰符即为同步方法

语法为 synchronized(锁对象){

}

注意:锁对象需要被所有的线程共享(即创建Object对象)

非静态的同步方法的锁对象this

静态的同步方法的锁对象是当前类的字节码对象

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值