在网上搜了好多,没有搜到这方面的内容,自己浅薄写点吧。

1、.net和java的主线程和子线程,原理是类似的

(1)、当子线程是前台线程时,主线程结束,子线程并未结束(还将继续运行,即进程未结束)

(2)、若是子线程改成后台线程,主线程结束,子线程也会结束(从而进程也会关闭)

.net代码示例如下,java类似

/// <summary>
/// 测试主线程子线程结束先后问题
/// </summary>
static void TestThreadParentAndSon()
{
//通过ParameterizedThreadStart创建线程
string a = "ddd";
//此处,当子线程要传“形参”,需要用ParameterizedThreadStart来实力话(没有形参,用ThreadStart即可),
//java,多线程中,传递形参,也要用final修饰
//java,多线程中,共享的变量为何在main()里必须用final修饰
Thread thread = new Thread(new ParameterizedThreadStart(Thread1));
//此处可以证明,当子线程是前台线程时,主线程结束,子线程并未结束(还将继续运行,即进程未结束)
//若是子线程改成后台线程,主线程结束,子线程也会结束(从而进程也会关闭)
//默认是前台线程
//thread.IsBackground = true;
//给方法传值
thread.Start(a);
//此句,是输入参数,即可往下执行
Console.ReadKey();
Thread th = Thread.CurrentThread;//获取当前工作的线程
th.Abort();
}
/// <summary>
/// 创建有参的方法
/// 注意:方法里面的参数类型必须是Object类型
/// </summary>
/// <param name="obj"></param>
static void Thread1(object obj)
{
obj += "哈哈";
while (true)
{
Console.WriteLine(obj+" "+DateTime.Now);
}
}

2、java和.net中多线程的共享变量原理和实现方式,是很不一样的  

(1)、.net子线程可以使用主线程的变量,而且变量在子线程中改变,主线程中也会改变。如过是多个子线程的话,那么就会存在是否要加锁的问题

 static void Main(string[] args)
{
int sharedValue = ;
Thread t1 = new Thread(() => {
// Do something.
sharedValue += ;
Console.WriteLine("子线程值为a:"+sharedValue);
Thread.Sleep();
Console.WriteLine("子线程值为b:" + sharedValue);
Console.ReadLine();
});
t1.Start();
sharedValue += ;
//Thread.Sleep(1000);
Console.WriteLine("主线程结束a,共享值为:"+sharedValue);
Thread th = Thread.CurrentThread;//获取当前工作的线程
th.Abort();
Console.WriteLine("主线程结束b,共享值为:" + sharedValue);
}

(2)、对java来说,主线程向子线程传参,或者在子线程中使用主线程的变量,那么此变量都要加上final修饰

public class testcs {
//验证多线程,传参问题
public static void main(String[] args)
{
int c=3;
try {
System.out.println("hello world");
test(c);
} catch (Exception e) {
e.printStackTrace();
}
//File file = new File("D:\\dev3\\统一渠道管理\\EB.SaleChannelPlatform");
//deleteFiles(file);
} /**
*
* @param b
*/
public static void test(final int b) {
final int a = 10;
//此时主线程条用test方法,那么此方法还在主线程里,只有到了下句new Thread并启动(thread里面的程序才属于子线程)
new Thread(){
public void run() {
System.out.println(a);
System.out.println(b);
};
}.start();
}
}

java多线程和.net多线程区别与联系的更多相关文章

  1. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  2. Java学习手记2——多线程

    一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视频,你想想是不是很蛋疼. 所以 ...

  3. Java 并发性和多线程

    一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...

  4. Java并发性和多线程

    Java并发性和多线程介绍   java并发性和多线程介绍: 单个程序内运行多个线程,多任务并发运行 多线程优点: 高效运行,多组件并行.读->操作->写: 程序设计的简单性,遇到多问题, ...

  5. Java并发性和多线程介绍

    java并发性和多线程介绍: 单个程序内运行多个线程,多任务并发运行 多线程优点: 高效运行,多组件并行.读->操作->写: 程序设计的简单性,遇到多问题,多开线程就好: 快速响应,异步式 ...

  6. 带着新人看java虚拟机04(多线程篇)

    我记得最开始接触多进程,多线程这一块的时候我不是怎么理解,为什么要有多线程啊?多线程到底是个什么鬼啊?我一个程序好好的就可以运行为什么要用到多线程啊?反正我是十分费解,即使过了很长时间我还是不是很懂, ...

  7. Java简明教程 12.多线程(multithreading)

    单线程和多线程 关于它们的区别,zhihu上有一个回答,我认为十分不错,如下: . 单进程单线程:一个人在一个桌子上吃菜. . 单进程多线程:多个人在同一个桌子上一起吃菜. . 多进程单线程:多个人每 ...

  8. Java面试中的多线程问题

    很多核心 Java 面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时,娴熟的实际经验是必需的.这篇文章收集了 Java ...

  9. java中多线程 - 如何创建多线程

    线程 什么是线程: 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源 表面上 ...

随机推荐

  1. “failed to excute script xxx” PyInstaller 打包python程序为exe文件过程错误

    在使用PyInstaller打包python程序,打包命令为: pyinstaller -F -w -i manage.ico yourpyfile.py 顺便说一下几个参数的作用 -F:是直接生成单 ...

  2. [SLAM] 03. ORB-SLAM2

    一年后再读SLAM~ 行业有了不少工程实践方面的突破 一.链接:https://www.zhihu.com/question/53571648/answer/176732257 目前来说,受到业界肯定 ...

  3. dokcer使用--link 让容器相连

    在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供MySQL的数据库服务,而另外两个容器 ...

  4. Oracle中add_months()函数的用法

    查询当前时间1个月以前的时间: select add_months(sysdate,-1) from dual; 查询当前时间1个月以后的时间: select add_months(sysdate,1 ...

  5. php链式操作的实现

    );//$db->where("id=1");//$db->where("name=2");//$db->order("id des ...

  6. KMP 算法详解

    之前模模糊糊的理解了KMP,结果由于并不是完全弄清楚而导致自己在一道题目上疯狂的T,似乎是next函数写的有问题,于是痛心疾首的回来写一篇报告,警示自己 对KMP来说,匹配串的next数组是重中之重, ...

  7. C# 方法中的this参数

    x 先看下面的代码: public static class StringExtension { public static void Foo(this string s) { Console.Wri ...

  8. React组件的State

    React组件的State 1.正确定义State React把组件看成一个状态机.通过与用户的交互,实现不同状态,然后渲染UI,让用户界面和数据保持一致.组件的任何UI改变,都可以从State的变化 ...

  9. MySQL复制原理-加强版

    mysql从3.23开始提供复制功能,复制指将主库的ddl和dml操作通过binlog文件传送到从库上执行,从而保持主库和从库数据同步.mysql支持一台主库同时向多台从库复制,从库同时也可以作为其他 ...

  10. OpenGL基础探究

    GLuint vertShader, fragShader; NSURL *vertShaderURL, *fragShaderURL; self.program = glCreateProgram( ...