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中多线程 - 如何创建多线程
线程 什么是线程: 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源 表面上 ...
随机推荐
- websphere 删除文件
META-INF 文件夹下加入ibm-partialapp-delete.props即可 里面添加路径 如WEB-INF/xxx/xxx.xxx
- jxl和POI的区别
最近两个项目中分别用到jxl和POI,因为用的都是其中的简单的功能,所以没有觉得这其中有太大的区别.有人针对他们做了比较,这里也拿出来展示一下. 首先从优缺点上来说 一.jxl 优点: Jxl对中文支 ...
- OpenGL 太阳系行星拾取例子(GL_SELECT) VS2008 + glut实现
太阳系:Solar System 以太阳(Sun)为中心,由内到外分别是: 水星(Mercury) 金星(Venus) 地球(Earth) 火星(Mars) 木星(Jupiter) 土星(Saturn ...
- [Laravel] 11 - WEB API : cache & timer
前言 一.资源 Ref: https://www.imooc.com/video/2870 二.缓存 缓存:静态缓存.Memcache.redis缓存 Ref: [Laravel] 09 - Func ...
- python 爬虫练习
bs去除特定标签. # url import easygui as g import urllib.request from bs4 import BeautifulSoup import os im ...
- 128、View 绘制流程 & 自定义View
记清楚函数调用的顺序才能准确地进行调用. 根据调用链,可将整个绘制过程分为三部分:Measure - Layout - Draw Measure 过程 1. 测量过程由上至下,在measure过程的最 ...
- ehcache缓存配置与参数说明
<diskStore path="java.io.tmpdir" /> <defaultCache eternal="false" maxEl ...
- 导入日志文件到mysql数据库表
#!/bin/bash #**************************************************************************** #***将/usr/ ...
- [转]pycharm active code
43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...
- Pro ASP.NET MVC –第二章 第一个MVC程序
学习一个软件开发框架的最有效的方式就是了解并使用它.在本章,你将会创建一个简单基于ASP.NET MVC Framework的数据-实体应用程序.我们会该程序划分成若干小块,每次介绍一个部分,以便你能 ...