标签:tac and int 程序 trace final class stat java
在网上搜了好多,没有搜到这方面的内容,自己浅薄写点吧。
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 = 0; Thread t1 = new Thread(() => { // Do something. sharedValue += 3; Console.WriteLine("子线程值为a:"+sharedValue); Thread.Sleep(1000); Console.WriteLine("子线程值为b:" + sharedValue); Console.ReadLine(); }); t1.Start(); sharedValue += 1; //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();
}
}
标签:tac and int 程序 trace final class stat java
原文地址:https://www.cnblogs.com/pengzhong2007/p/9565504.html