我正在编写一个运行多线程银行的代码.我首先用一个程序创建一个线程数组,然后将它们传递给另一个运行循环的线程来启动它们.对于应用程序的一部分,我有一个CPU密集型方法,基本上在一个彼此之间运行一系列循环.唯一的问题是,由于某种原因,它没有产生我认为应该的方式.以下是运行线程的代码:
public void run(){
this.setPriority(MAX_PRIORITY);
int count = 0;
while(count<transactions.length){
int copy = count;
if(transactions[copy] instanceof Jumbler){
System.out.println(copy + " is a jumbler.");
}
else{
System.out.println(copy + " is not a jumbler");
}
transactions[copy].run();
count++;
}
}
Run Code Online (Sandbox Code Playgroud)
然后是Jumbler run方法:
public void run(){
System.out.println("running jumbler");
Thread.yield();
Thread.currentThread().yield();
try{
Thread.currentThread().sleep(5000);
}catch(InterruptedException e){}
//this.setPriority(MIN_PRIORITY);
System.out.println("still running.");
Thread.yield();
nums = new int[1000];
int i = 0;
do{
Thread.yield();
for(int x=0;x<1000;x++){
Thread.yield();
//System.out.println("in the loop");
nums[x]=(int)(Math.random()*10000)+1;
for(int y = 0;y<1000;y++){
Thread.yield();
//System.out.println("in the the loop"); …Run Code Online (Sandbox Code Playgroud) 在阅读Joe Albahari的优秀着作"C#中的线程"时,我遇到了以下含糊不清的句子:
线程安全类型不一定使程序使用它是线程安全的,并且后者涉及的工作通常使前者冗余.
(您可以在此页面上找到该句子;只需搜索"不确定性"即可快速跳转到相应的部分.)
我希望使用ConcurrentDictionary来实现某些线程安全的数据结构.段落告诉我ConcurrentDictionary不保证对我的数据结构的线程安全写入吗?有人可以提供一个反例,显示线程安全类型实际上无法提供线程安全吗?
在此先感谢您的帮助.
我有一个课程如下
public MyClass{
Boolean flag = false;
public Boolean getflag(){
synchronized(flag){
//BLOCK 1
return flag;
}
}
public Boolean setflag(){
synchronized(flag){
//BLOCK 2
this.flag = flag;
}
}
}
Run Code Online (Sandbox Code Playgroud)
两种方法都在对象标志上同步.现在我怀疑是两个不同的线程可以同时执行同步块(1和2).可能出现以下情况吗?1)线程1是设置标志值,线程2是否同时获取其值?
在我的代码中,我发现出于性能原因阻止重复和慢速依赖对象实例化,假设调用ArrayAdapter.getView()不是通过标记它来同时执行将是非常有帮助的synchronized.
有没有理由相信Android发出对getView的多线程调用,而应用synchronized关键字会损害性能?
我想我不能正确理解Java中的Vector是如何同步的.在我的代码中,一些线程正在运行修改我的向量的指令,例如调用mVector.addAll(anothervector).但是在使用以下代码对向量进行交互时,我的应用程序崩溃了:
// the vector declaration
Vector<myClass> mVector = new Vector<myClass>;
// the method that crashes
public void printVector(){
for (myClass mObject: mVector){
System.out.println(mObject);
}
}
Run Code Online (Sandbox Code Playgroud)
如果Vector对象同步,为什么会崩溃?我该如何解决?提前致谢
我有一个线程只执行一次任务.如果它无法在适当的时间内完成,我想阻止它.我怎样才能做到这一点?我之前看到的所有方法都使用了while循环和一个多次执行任务的标志; 但我的任务不是那样的.
谢谢你们.
这是停止线程的好例子. 如何优雅地停止java线程? - 感谢同性恋者:)但是当我尝试检查这个例子时,我收到了无限循环.你能帮助我吗?这是我的代码
public class Num{
public void crash(ManualStopping t1) {
t1.stopMe();
}
public static void main(String [] args) {
Num num = new Num();
ManualStopping t1 = new ManualStopping();
t1.run();
System.out.println("Main thread");
num.crash(t1);
}
Run Code Online (Sandbox Code Playgroud)
}
class ManualStopping extends Thread{
volatile boolean finished = false;
public void stopMe(){
finished = true;
}
public void run() {
while(!finished){
System.out.println("I'm alive");
}
}
Run Code Online (Sandbox Code Playgroud)
}
我在MSDN中读到,当用作公共静态类型时,List是线程安全的.但是,以下代码片段证明了其他情况.我试图添加和删除列表中的元素,但删除方法中途抛出一个错误说索引超出范围.这里出了什么问题?
这是检查我的理论的正确实现吗?如果没有,有人可以建议一个更好的例子.
class Program
{
public static List<string> strlist = new List<string>();
public static AutoResetEvent autoEvent = new AutoResetEvent(false);
static void Main(string[] args)
{
strlist = new List<string>();
new Thread(() =>
{
for(int i=0;i<10000000;i++)
{
strlist.Add("item1");
}
//Thread.Sleep(5000);
autoEvent.Set();
}).Start(); ;
new Thread(() => {
strlist.ForEach(e => strlist.Remove(e));
}).Start();
Console.WriteLine("Waiting");
autoEvent.WaitOne();
int ci = 0;
strlist.ForEach(str => ci++);
Console.WriteLine(ci.ToString() + " Done");
Console.Read();
}
}
Run Code Online (Sandbox Code Playgroud) 我需要一个线程来检查JAVA桌面应用程序上的网络连接可用性.我得到了这样一个帖子
class DataSyncThread extends Thread {
DataSyncThread() {
}
public void run() {
while(true){
try{
System.out.println("Checking for network");
InetAddress addr = InetAddress.getByName(host);
if(addr.isReachable(MIN_PRIORITY)){
syncData();
}
this.sleep(1000000);
}catch(Exception e){}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在构造函数中调用它时,应用程序永远不会加载.当我查看控制台(我触发jar从中加载)线程工作时,它在控制台中打印"正在检查网络".
帮助赞赏
thread-safety ×10
java ×6
c# ×2
android ×1
ios ×1
listadapter ×1
listview ×1
thread-sleep ×1
uikit ×1