java中的多线程

本文详细介绍了线程与进程的概念及区别,包括并行与并发的特点,并解释了多线程的优势,最后通过Java代码示例展示了如何创建和启动线程。

线程同步:
并行和并发
并行:指两个或者多个时间再同一个时刻发生 (只能多核才可以)
并发:指两个或者多个时间在同一段时间发生(有先后发生的概念)
时间片:CPU分配给各个程序的运行时间(很小的概念)

进程:一个内存中运行的应该用的程序,不同的进程内存空间不一样,一个应用程序可以运行多个进程
线程:进程中的一个执行单元 一个进程可以执行多个线程(多线程)

线程和进程的区别:
进程 有独立的内存空间,一个进程至少一个线程
线程 堆空间共享数据 创建线程的空间比进程少很多 进程元
线程调度是由虚拟机来决定的 (抢占式调度 分时调度) java的进程至少两个 一个主线程 一个垃圾回收线程

多线程的优势:
多线程作为一种多任务 并发的工作方式的优势 (多线程下载)
1.线程可以共享内存
2.线程消耗的资源小
3.分配由java虚拟机来调度

操作进程:
//运行一个线程 方式1
Runtime time=Runtime.getRuntime();
time.exec(“notepad”);
//方式2
ProcessBuilder pb=new ProcessBuilder(“notepad”);
pb.start();

创建和启动线程

java.lang.Thread 包

package cn.bdqn.manytread;

import java.io.IOException;
import java.lang.Thread;

/**
* 多线程的演示
* @author ASUS
*
*/
class A implements Runnable
{

@Override
public void run() {
    // TODO Auto-generated method stub
    for(int i=0;i<50;i++)
    {
        System.out.println("播放音乐");
    }
}

}

class B extends Thread
{

@Override
public void run() {
    // TODO Auto-generated method stub
    for(int i=0;i<50;i++)
    {
        System.out.println("播放音乐");
    }

}
}

public class GameDemo {

public static void main(String[] args) throws IOException {
    /*System.out.println();
    //运行一个线程  方式1
    Runtime time=Runtime.getRuntime();
    time.exec("notepad");
    //方式2
    ProcessBuilder pb=new ProcessBuilder("notepad");
    pb.start();*/


    //使用继承创建和运行线程 方式1
    //1.定义一个类a 让a继承java.lang.Thread类
    //2.在a类中覆盖run方法
    //3.我们在run方法中编写要执行的操作  run线程执行体
    //4.在main中创建线程对象 并启动线程
    //A a=new A();
    for(int i=0;i<50;i++)
    {
        System.out.println("打游戏");
        if(i==10)
        {
            B b=new B();//创建线程。
            b.start();//启动线程
        }
    }

    //通过实现Runnable实现线程
    //1.定义一个过一个类 实现 Runnalble接口
    //2.在A类中覆盖Runable中run方法
    //3.编写run
    //4.创建 启动线程  (注:A不属于线程类 只有Thread及其子类是线程类)
    //但是Thread类中有Runnable对象构造器

    for(int i=0;i<50;i++)
    {
        System.out.println("打游戏");
        if(i==10)
        {
            A a=new A();
            Thread t=new Thread(a);
            t.start();//启动线程
        }
    }
    //匿名内部类 实现线程的创建和启动

    new Thread(
            new Runnable(){
                public void run()
                {

                }
            }

            ).start();



    new Thread(){
        //覆盖run方法
                public void run()
                {

                }

    }.start();

}
}

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值