线程 总结(一)

进程:操作系统上并发运行的一个程序。
并发:由cpu分配时间片执行 微观串行,宏观并行
线程:进程中并发的一个任务

线程的组成
1.cpu
2.数据 堆空间共享 栈空间独立
3.代码

创建线程的方式
1.实现Runnable接口,创建Runnable类型的对象。将其提交给Thread对象

class Thread01 implements Runnable{
    
    
	public void run(){
    
    
		for(int i=;i< 1000:i++){
    
    
			System.out.println("aaa"+i);
		}
	}
}

Runnable r = new Thread01();
Thread01 t = new Thread01(r);
t.start();

2.继承Thread 类,重写run方法

class Thread02 extends Thread{
    
    
	public void run(){
    
    
		for(int i = 10;i<1000;i++){
    
    
			System.out.println("bbb"+i);
		}
	}
}

Thread t = new Thread02();
t.start();

线程的状态
在这里插入图片描述
线程同步
当多个线程访问同一个对象(临界资源)时,会破坏原子操作(不可分割的操作),会出现数据不一致的现象。

1.同步代码块

synchronized(obj){
    
    
	//同步的代码

}//对代码块的代码进行加锁

每 一个Java对象的都有锁标记,活的锁标记进入同步代码块。
当同步代码块的内部执行完毕,会释放锁标记。
互斥锁标记 必须使用同一个Java对象

2.同步方法

public synchronized void add(String s){
    
    
	//同步方法内部
}

public void add(String s){
    
    
	synchronized(this){
    
    

	}
}
//使用thid作为锁对象,对方法内部的代码进行加锁。

只有获取到obj对象的锁标记,执行方法内部的代码方法执行完毕,释放锁标记。

线程通信

synchronized(obj){
    
    
	t1
	synchronized(obj1){
    
    
	
	}
}

synchronized(obj1){
    
    
	t2
	synchronized(obj){
    
    

	}
}

wait(): 必须使用在对obj对象加锁同步代码块中
使当前线程陷入等待队列 --> 阻塞状态,同时释放锁标记

notify()/notifyAll(): 必须使用在对obj对象加锁同步代码块中,
唤醒等待队列中的一个或全部 等待线程

猜你喜欢

转载自blog.csdn.net/gym02/article/details/105989819
今日推荐