Tag: multithreading

如何在Java Android Studio中的新线程上启动进程? (要求相当于C#代码)

我在C#代码上使用此例程来启动/停止/重新启动另一个线程上的某个函数: using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { var CancelationToken = new CancellationTokenSource(); // declare and initialize a token for the cancelaion while (something) { if (Whatever) { CancelationToken = new CancellationTokenSource(); // re initialize if wanted to restart Task.Run(() = > Process(), CancelationToken.Token); //start a method […]

发布/订阅架构

我尝试编写一个pub / sub系统(客户端和服务器端),其中客户端接收定期更新(如心跳,消息控制),并可以向服务器发出命令(订阅某些源,….)。 这样做有什么好办法? 我已经有一个实现线程池的服务器来管理传入的客户端连接。 我想知道如何处理连接的两端可以在NetworkStream中读取或写入数据的事实。 此外,我的更多客户实际上会向服务器发出很少的命令(主要是订阅一些数据,然后只是定期更新)。 我尝试使用普通套接字,tcpclient,tcplistner(我稍后会看到WCF) Thx Dave

C#线程问题和最佳实践

这是我第一次在C#应用程序中使用线程。 基本上它是一个应用程序,它检查列表中的一堆网站是死还是活。 这是我第一次尝试使用multithreading public void StartThread(string URL,int no) { Thread newThread = new Thread(() => { BeginInvoke(new Action(() => richTextBox1.Text += “Thread ” + no + ” Running” + Environment.NewLine)); bool b = ping(URL); if (b == true) { BeginInvoke(new Action(() => richTextBox2.Text += “Okay” + Environment.NewLine)); } else { return; } }); newThread.Start(); } […]

使自定义对象线程安全

我发布了一个关于返回集合的早期问题 ,并且出现了线程安全的主题。 我得到了这个链接来做更多的阅读,我找到了这个特定的行: 通常,避免锁定公共类型或超出代码控制范围的实例。 首先,如果我错了,请纠正我,但微软是否锁定公共类型,即平衡变量? 其次,我将如何锁定自己的getter / setter属性。 假设我有以下课程: private int ID; public Person(int id) { this.Identification= id; } public int Identification { get { return this.ID; } private set { if (value == 0) { throw new ArgumentNullException(“Must Include ID#”); } this.ID = value; } } 吸气剂公开正确吗? 只有setter被声明为private。 那么,我将如何锁定,或使我的getter / setter属性线程安全?

在特定时间调用方法

我正在开发一个应用程序,它具有使用一些外部Web服务发送一些SMS消息和电子邮件的小function。 这些消息可以安排在某个特定时间的某个特定日期或将来发送。 它们也可以安排在每天/每周/每月发送。 如何设计我的系统以“知道”何时调用发送方法(不进行轮询)?

安全读取long 内容的最快方法,其元素同时更改

当你有一个 long[] myArray = new long[256]; 其项目由多个线程使用更改 Interlocked.Increment(ref myArray[x]) 肯定不可能在某个时间点获取myArray的快照,因为同时存在非锁定写入,所以我不是想要得到它。 那么我真的需要Volatile.Read的每一个元素来获取过去某个时刻的所有值的副本吗? long[] copy = new long[256]; for (int i = 0; i < 256; i++) copy[i] = Volatile.Read(ref myArray[i]); 由于我对某个时间点的快照不感兴趣,过时的值不是问题,但由于64位非易失性读取不是primefaces的,我担心以下可能会给我一个预增量的一半long,和后增量的一半,可能会给出一个从未存在于数组中的值。 long[] copy = new long[256]; for (int i = 0; i < 256; i++) copy[i] = myArray[i]; 那么Volatile.Read变种是正确的选择,因为我不想使用任何锁定?

有什么能比Concurrent集合更好地解决这个multithreading场景

我有一个持久的B +树,多个线程正在读取树的不同块并对读取数据执行一些操作。 有趣的部分:每个线程产生一组结果,作为最终用户,我想在一个地方看到所有结果。 我做了什么:一个ConcurentDictionary和所有线程正在写它。 这一切都很顺利。 但是应用程序是时间关键的,一秒钟意味着完全不满意。 与Dictionary相比,ConcurentDictionary因为线程安全开销本质上很慢。 我可以使用Dictionary,然后每个线程都会将结果写入不同的词典。 但是我会遇到合并不同词典的问题。 。 我的问题: 并发集合是否适合我的场景? 如果不是(1),那么我将如何合并最佳不同的词典。 鉴于此, (a)逐个复制项目和(b) LINQ是已知的解决方案,并不像预期的那样最佳:) 如果不是(2);-)你会建议什么? 。 快速信息: #Thread = processorCount。 应用程序可以在标准笔记本电脑(即4个线程)或高端服务器(即<32个线程)上运行 物品数量。 该树通常拥有超过1.0E + 12项。

如何获取另一个线程的ThreadStatic值?

是否可以通过Thread引用获取该线程的ThreadStatic值?

在c#中使用信号量

嗨,我想在我的应用程序中使用信号量。我已经这样声明了。 using System; using System.Threading; // This thread allows only two instances of itself // to run at any one time. class MyThread { public Thread Thrd; static Semaphore sem = new Semaphore(2, 2); public MyThread(string name) { Thrd = new Thread(this.Run); Thrd.Name = name; Thrd.Start(); } 但我无法编译它给我这个错误 The type or namespace name ‘Semaphore’ could […]

任务线程中抛出的exception,未被UnobservedTaskException捕获

我无法理解TPL中如何处理exception。 以下代码应说明我的问题。 using System; using System.Collections.Generic; using System.Net; using System.Threading; using System.Threading.Tasks; namespace WebDLApp { class Program { static void Main(string[] args) { TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; // Not catching exception List sites = new List{ “http://microsoft.com”, “http://yahoo.com”, “http://facebook.com”, “http://amazon.com”, “http://foooo”, “http://aol.com”, “http://ask.com”, “http://wikipedia.org” }; List<Task> tasks = new List<Task>(); foreach (string site in sites) { […]