多线程

一、进程的概念:

程序的一次运行叫做一个进程 程序中至少包含一个进程

二、线程

一个进程中至少包含一个线程,线程是进程的程序中的不同执行路径

三、多进程:在操作系统中同时运行多个任务,比如qq

四、多线程:一个程序中不同的执行路径,注意分支不是多线程,只是一个线程

五、线程和进程的区别

1.定义区别

2.从系统开销上来说

1.进程的开销比较大,虚拟机会为这个进程分配5个内存空间

 2.线程的开销小,启动一个新的线程会为这个线程开一个虚拟栈,多个线程共享一个堆和方法区的

六、进程调度算法

1.FCFS先来先服务

2.短进程优先 优先使用cpu

3.时间片轮转

4.优先级高者优先

六.操作系统的几种管理方式

1.进程管理

2.内存管理

3.文件管理

4.设备管理

5.作业管理

七、实现多进程的两种方法

//多线程的第一种实现方式:继承Thread类
public class 线程的第一种方法 extends Thread {
  private int i;
  //第一步:继承Thread类 从写run()方法
  public void run(){
	  for(;i<100;i++){
		  System.out.println(getName()+" "+i);
	  }
  }
  public static void main(String[] args) {
	  {
		  for(int i=0;i<100;i++){
			  System.out.println(Thread.currentThread().getName()+" "+i);
		 if(i==20){
			 //第二步、通过创建Thread类的对象来创建新的对象
			 new  线程的第一种方法().start();
			 new  线程的第一种方法().start();
			 //第三步:调用Thread类对象的Start方法来启动一个线程
		 }
		  }
	  }
}

//线程的第二种方法 实现runable接口 重写run方法
public class 线程第二种方法 implements Runnable {
private int i=0;
	@Override
	//第一步 实现runable接口 重写run方法
	//通过Thread.currentThread().getName()来获得当前线程名字
	public void run() {
		  for(;i<100;i++){
			  System.out.println(Thread.currentThread().getName()+" "+i);
		
	}

}  //第二步:先创建实现了Runable接口类的对象r
	//创建thread对象并把r作为参数传给Thread类的构造函数
	public static void main(String[] args) {
		线程第二种方法 r=new 线程第二种方法();
		Thread t1=new Thread(r,"线程1");
		Thread t2=new Thread(r,"线程2");
		t1.start();
		t2.start();
		//第三步,调用Thread对象的Start方法
	}
//两种方法推荐使用第二种方法 因为java是单继承,使用第一种继承Thread类这种方式,不能继承其他类了
//继承Thread类无法共享数据 对象只能用自己的属性 使用接口,如果两个线程对象都是使用同一个Runable对象,可以共享
八.同步方法的原理:锁定当前对象 拿当前对象作为一把锁  this 1开 0关
/同步方法的原理:锁定当前对象 拿当前对象作为一把锁  this 1开 0关
//加了synchronized加了锁以后 调用这个方法 要先判断这把锁是开或者关
//实现同步的两种方式:一、同步方法:pubilc synchronized test(){} 2.同步代码块synchronized(this){}3.同步锁
public class 同步方法 implements Runnable{
private int sum=8000;
private ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
	withdraw();
	}
/*public synchronized void withdraw(){
	System.out.println("进入了withdraw");
	if(5000<=sum){
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			
			e.printStackTrace();
		}
		sum=sum-5000;
		System.out.println("出5000");
		}else{
			System.out.println("余额不足");
		}
	
}*///同步方法
/*public void withdraw(){
	synchronized (this) {
	System.out.println("进入了withdraw");
		if(5000<=sum){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				
				e.printStackTrace();
			}
			sum=sum-5000;
			System.out.println("出5000");
			}else{
				System.out.println("余额不足");
			}
	}
}//同步代码块
*/
public void withdraw(){
	
	lock.lock();
	System.out.println("进入了withdraw");	
	try{
	if(5000<=sum){
		
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			
			e.printStackTrace();
		}
		sum=sum-5000;
		System.out.println("出5000");
		}else{
			System.out.println("余额不足");
		}
		}finally{
			lock.unlock();
		}
}//方法锁

public static void main(String[] args) {
	同步方法 s=new 同步方法();
	Thread t1=new Thread(s);
	Thread t2=new Thread(s);
	t1.start();
	t2.start();
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			
			e.printStackTrace();
		}
	  System.out.println("账户余额为:"+s.getSum());
}
public int getSum() {
	return sum;
}
public void setSum(int sum) {
	this.sum = sum;
}

}
九.多线程基本方法
1.isAlive()判断线程是否存活
代码如下:
public class 判断线程是否活着  extends Thread{
	 int i=0;
    public void run(){
    	System.out.println("程序正在运行:"+Thread.currentThread().isAlive());
    	while(i<=200){
    		System.out.println(this.getName()+i);
    		i++;
    	}
    	try {
			Thread.sleep(300);
		} catch (InterruptedException e) {
		
			e.printStackTrace();
		}
    }
    public static void main(String[] args) {
		System.out.println("程序正在运行:"+Thread.currentThread().isAlive());
		判断线程是否活着 s =new 判断线程是否活着();
	      System.out.println("s线程处于新建状态"+s.isAlive());
	      s.start();
	      System.out.println("s线程处于就绪状态:"+s.isAlive());
	      try {
			Thread.sleep(2000);
		
		} catch (InterruptedException e) {
		
			e.printStackTrace();
		}
    	System.out.println("s线程阻塞了"+s.isAlive());
    	try {
			Thread.sleep(600);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	System.out.println("s线程结束了"+s.isAlive());
    	
	}
}
2.优先级代码如下:
public class 优先级  implements Runnable{
private int i;


	@Override
	public void run() {
		for(i=0;i<=100;i++){
			System.out.println(Thread.currentThread().getName()+" "+i);
		}
		
	}
	public static void main(String[] args) {
		优先级 s=new 优先级();
		Thread a=new Thread(s,"线程1");
		Thread b=new Thread(s,"线程2");
		a.setPriority(Thread.MIN_PRIORITY);
		b.setPriority(Thread.MAX_PRIORITY);
		a.start();
		b.start();
	}

}
3.Join线程合并(相当于方法调用)
//Join线程合并(相当于方法调用)
public class 线程合并  implements Runnable{
private int i;
	@Override
	public void run() {
		 while(i<=100){
			 System.out.println(Thread.currentThread().getName()+" "+i);
			 i++;
		 }
		
	}
	public static void main(String[] args) {
		线程合并 s=new 线程合并();
		Thread a=new Thread(s);
		
		a.start();
		try {
			a.join();
		} catch (InterruptedException e) {
			
			e.printStackTrace();
		}
		
	}
   
}
4.yield()线程打断
public class Test {	
	public static void main(String[] args) {
	   NumTread a=new NumTread();
	   StringTread b=new StringTread();
	   a.start();
	   b.start();
	   
}	
    static class NumTread extends Thread{
		int i=0;
		@Override
		public void run() {
			while(i<200){
				if(i%500==0){
					yield();
				}
				System.out.println("我在打印数字:"+i++);
			}
		}
	}
	static class StringTread extends Thread{
		int i=0;
		@Override
		public void run() {
			while(i<200){
				System.out.println("我在打印字符串:"+i++);
			}
		}
	}


}


 



 

 








深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值