java多线程和.net多线程区别与联系
在网上搜了好多,没有搜到这方面的内容,自己浅薄写点吧。
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-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中
本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait( ...
- Java学习手记2——多线程
一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视频,你想想是不是很蛋疼. 所以 ...
- Java 并发性和多线程
一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...
- Java并发性和多线程
Java并发性和多线程介绍 java并发性和多线程介绍: 单个程序内运行多个线程,多任务并发运行 多线程优点: 高效运行,多组件并行.读->操作->写: 程序设计的简单性,遇到多问题, ...
- Java并发性和多线程介绍
java并发性和多线程介绍: 单个程序内运行多个线程,多任务并发运行 多线程优点: 高效运行,多组件并行.读->操作->写: 程序设计的简单性,遇到多问题,多开线程就好: 快速响应,异步式 ...
- 带着新人看java虚拟机04(多线程篇)
我记得最开始接触多进程,多线程这一块的时候我不是怎么理解,为什么要有多线程啊?多线程到底是个什么鬼啊?我一个程序好好的就可以运行为什么要用到多线程啊?反正我是十分费解,即使过了很长时间我还是不是很懂, ...
- Java简明教程 12.多线程(multithreading)
单线程和多线程 关于它们的区别,zhihu上有一个回答,我认为十分不错,如下: . 单进程单线程:一个人在一个桌子上吃菜. . 单进程多线程:多个人在同一个桌子上一起吃菜. . 多进程单线程:多个人每 ...
- Java面试中的多线程问题
很多核心 Java 面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时,娴熟的实际经验是必需的.这篇文章收集了 Java ...
- java中多线程 - 如何创建多线程
线程 什么是线程: 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源 表面上 ...
随机推荐
- centos7系统下安装php-fpm并配置nginx支持并开启网站gzip压缩
注:此处不介绍nginx的安装.以下教程默认已安装nginx. 1. yum install -y php-fpm yum install php-pdo yum install php-mysql ...
- WP8.1学习系列(第二十七章)——ListView和GridView入门
快速入门:添加 ListView 和 GridView 控件 (XAML) 在本文中 先决条件 选择 ListView 或 GridView 将项添加到项集合 设置项目源 指定项目的外观 指定视图 ...
- ios时间差
/** * @method * * @brief 获取两个日期之间的天数 * @param fromDate 起始日期 * @param toDate 终止日期 * @re ...
- mysql8.0驱动问题
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</a ...
- nginx关闭目录浏览功能
nginx图片服务器,因为图片的敏感度,不允许直接访问图片的目录: 需要修改配置文件,去掉 autoindex on; 重启nginx即可 location /soft { #autoindex on ...
- Solr7.4.0的API(Solrj)操作及项目中的使用
一.SolrJ的概念 solr单机版服务搭建:https://www.cnblogs.com/frankdeng/p/9615253.html solr集群版服务搭建:https://www.cnbl ...
- easyui---form表单_validatebox验证框
第一种方式:混合写法 $("#password").validatebox({ }) <td><input type="text" name= ...
- [No0000142]Outlook通过添加签名 自动添加邮件模板
新建邮件->alt+F9切换域代码显示. 编写好模板后,全选复制到签名. 2018/05/7_加班申请_高亚斌 工号 姓名 开始时间 结束时间 工作事项 160227 高亚斌 2018/05/7 ...
- pytorch的一些基本操作
(1)生成一个未初始化的tensor import torch x = torch.Tensor(5,3) print(x) (2)随机初始化一个tensor y = torch.randn(5,3) ...
- vim操作表